有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用mockito填充列表

我有一门课要考

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();
}

如何填充列表? 据我所知,InjectMock由模拟列表和集合注入,然后在每个测试用例之前填充。但我得到了NullPointerException


共 (1) 个答案

  1. # 1 楼答案

    • 不要模仿对象正常地实例化它们。要么做一个,要么做另一个。@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()方法