我有一个想要测试的类(class)。
public class MinicabManager {
public static Set<Driver> allDrivers ;
public static Set<Passenger> allPassengers;
public static List<Trip> trips;
public static Set<Driver> findFakeDrivers() {
Set<Driver> fakeDrivers = new HashSet();
for (Trip t : trips) {
for (Driver d : allDrivers) {
if (t.getDriver().getDriver() != d.getDriver()) {
fakeDrivers.add(d);
}
}
}
return fakeDrivers;
}
当我运行此测试时,我得到 NullPointerException :
@RunWith(MockitoJUnitRunner.class)
public class MinicabManagerTest {
@Mock
Set<Driver> allDrivers;
@Mock
Set<Passenger> allPassengers;
@Mock
List<Trip> trips;
@InjectMocks
MinicabManager minicabManager;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
minicabManager = new MinicabManager();
allDrivers = new HashSet();
allPassengers = new HashSet();
trips = new ArrayList();
Driver d1 = new Driver();
d1.setDriver("d1");
Driver d2 = new Driver();
d2.setDriver("d2");
allDrivers.add(d1);
allDrivers.add(d2);
Passenger p1 = new Passenger();
p1.setName("p1");
Passenger p2 = new Passenger();
p2.setName("p2");
allPassengers.add(p1);
allPassengers.add(p2);
Trip t1 = new Trip();
t1.setDriver(d1);
t1.setPassengers(allPassengers);
trips.add(t1);
}
@Test
public void testFindFakeDrivers() throws Exception {
Set<Driver> result = minicabManager.findFakeDrivers();
}
如何填充列表? 据我了解,InjectMocks 通过模拟列表注入(inject)并设置,然后在每个测试用例之前填充。但我得到 NullPointerException
最佳答案
- 不要模拟对象并正常实例化它们。要么做其中之一,要么做另一个。
@Mock
注解将为您创建一个模拟对象,您可以在测试中轻松使用它。 - 知道模拟对象是一个“假”对象,它只是假装属于某种类型。因此,如果您在模拟对象上调用任何方法/字段,它实际上不会执行任何操作(并且在非 void 方法的情况下将始终返回
null
)。 - 您无需指定
MockitoJUnitRunner
并调用initMocks()
方法。其中一个就足够了。 - 正如其他人提到的,您的测试似乎不需要模拟。所以它可能看起来像这样:
public class MinicabManagerTest {
@Before
void setUp() {
Set<Driver> allDrivers = new HashSet<>();
Set<Passenger> allPassengers = new HashSet<>();
List<Trip> trips = new ArrayList<>();
Driver d1 = new Driver();
d1.setDriver("d1");
Driver d2 = new Driver();
d2.setDriver("d2");
allDrivers.add(d1);
allDrivers.add(d2);
Passenger p1 = new Passenger();
p1.setName("p1");
Passenger p2 = new Passenger();
p2.setName("p2");
allPassengers.add(p1);
allPassengers.add(p2);
Trip t1 = new Trip();
t1.setDriver(d1);
t1.setPassengers(allPassengers);
trips.add(t1);
MinicabManager.allDrivers = allDrivers;
MinicabManager.allPassengers = allPassengers;
MinicabManager.trips = trips;
}
@Test
public void testFindFakeDrivers() throws Exception {
Set<Driver> result = MinicabManager.findFakeDrivers();
// assertions about the result here
}
此外,请注意不要将字符串与 =
和 !=
进行比较。使用equals()
方法。
关于java - 使用mockito填充列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58625582/