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
注释将为您创建一个模拟对象,您可以随时在测试中使用它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
}