Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用mockito填充列表_Java_Junit - Fatal编程技术网

Java 使用mockito填充列表

Java 使用mockito填充列表,java,junit,Java,Junit,我有一门课要考 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> fake

我有一门课要考

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;
}
公共类微型计算机管理器{
公共静态设置所有驱动程序;
公共静态设置所有乘客;
公共静态列表行程;
公共静态集findFakeDrivers(){
Set fakeDrivers=newhashset();
用于(行程t:行程){
用于(驱动程序d:所有驱动程序){
如果(t.getDriver().getDriver()!=d.getDriver()){
添加(d);
}
}
}
退回伪造司机;
}
运行此测试时,我得到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();
}
@RunWith(MockitoJUnitRunner.class)
公共级小型出租车管理器测试{
@嘲弄
设置所有驱动程序;
@嘲弄
设置所有乘客;
@嘲弄
列出行程;
@注射模拟
迷你车经理迷你车经理;
@以前
公共作废设置(){
initMocks(this);
minicabManager=新的minicabManager();
allDrivers=newhashset();
所有乘客=新哈希集();
trips=新的ArrayList();
驱动程序d1=新驱动程序();
d1.设定驱动器(“d1”);
驱动程序d2=新驱动程序();
d2.设定驱动器(“d2”);
所有驱动程序。添加(d1);
所有驱动程序。添加(d2);
乘客p1=新乘客();
p1.设定名称(“p1”);
乘客p2=新乘客();
p2.设定名称(“p2”);
所有乘客。添加(p1);
所有乘客。添加(p2);
跳闸t1=新跳闸();
t1.设置驱动器(d1);
t1.设置乘客(所有乘客);
增加(t1);
}
@试验
public void testFindFakeDrivers()引发异常{
Set result=minicabManager.findFakeDrivers();
}
如何填充列表? 据我所知,InjectMock由模拟列表和集合注入,然后在每个测试用例之前填充。但我得到的是NullPointerException
  • 不要模拟对象并正常实例化它们。可以选择其中一个,也可以选择另一个。
    @mock
    注释将为您创建一个模拟对象,您可以随时在测试中使用它
  • 要知道,mock-obejct是一个“假”对象,它只假装是某一类型的对象。因此,如果调用mock对象上的任何方法/字段,它实际上什么都不会做(对于非void方法,它总是返回
    null
  • 您不需要指定
    MockitoJUnitRunner
    并调用
    initMocks()
    方法,其中一个就足够了
  • 正如其他人所提到的,您的测试似乎不需要模拟。因此,它可能看起来像这样:
  • public类MinicabManagerTest{
    @以前
    无效设置(){
    Set allDrivers=new HashSet();
    Set allPassengers=new HashSet();
    List trips=new ArrayList();
    驱动程序d1=新驱动程序();
    d1.设定驱动器(“d1”);
    驱动程序d2=新驱动程序();
    d2.设定驱动器(“d2”);
    所有驱动程序。添加(d1);
    所有驱动程序。添加(d2);
    乘客p1=新乘客();
    p1.设定名称(“p1”);
    乘客p2=新乘客();
    p2.设定名称(“p2”);
    所有乘客。添加(p1);
    所有乘客。添加(p2);
    跳闸t1=新跳闸();
    t1.设置驱动器(d1);
    t1.设置乘客(所有乘客);
    增加(t1);
    MinicabManager.allDrivers=所有驱动程序;
    MinicabManager.allPassengers=所有乘客;
    MinicabManager.trips=行程;
    }
    @试验
    public void testFindFakeDrivers()引发异常{
    Set result=MinicabManager.findFakeDrivers();
    //关于结果的断言
    }
    

    另外,注意不要将字符串与
    =
    !=
    进行比较。使用
    equals()
    方法。

    如何设置属性
    所有驱动程序
    所有乘客
    行程
    (不是在单元测试中,而是在真实的代码逻辑中)你有构造函数和setter吗?因为我认为你可以通过设置这些值来测试你的类,而不需要mockito(在你的例子中不是很有用),谢谢。当我运行测试时,它会检查MinicabManager类中的findMakeDrivers()方法,当达到“for(Trip t:trips)”时抱怨它为空。我的问题是如何告诉我的testcase在测试类中查找trips?@hastati这是因为你没有将对象注入MinicabManager类。我编辑了我的答案以包含该部分。
    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
            }