因此,我开始为我们的Java-Spring项目编写测试。
我使用的是JUnit和Mockito。据说,当我使用when()...thenReturn()选项时,我可以模拟服务,而不需要像模拟它们一样。因此,我的目标是设置:
when(classIwantToTest.object.get().methodWhichReturnsAList(input))thenReturn(ListcreatedInsideTheTestClass)
无论我使用哪个when语句,都会得到一个NullpointerException异常,这当然是有道理的,因为输入是null。还有,当我尝试模拟对象的另一个方法时:
when(object.method()).thenReturn(true)
因为该方法需要一个未设置的变量,所以我也会遇到空指针异常。
但是我想使用 when()..thenReturn() 来避免创建这个变量等操作。我只想确保如果任何类调用此方法,则无论如何都返回 true 或上面的列表。
这是我基本的误解,还是有其他问题?
代码:
public class classIWantToTest implements classIWantToTestFacade{
@Autowired
private SomeService myService;
@Override
public Optional<OutputData> getInformations(final InputData inputData) {
final Optional<OutputData> data = myService.getListWithData(inputData);
if (data.isPresent()) {
final List<ItemData> allData = data.get().getItemDatas();
//do something with the data and allData
return data;
}
return Optional.absent();
}
}
这是我的测试类:
public class Test {
private InputData inputdata;
private ClassUnderTest classUnderTest;
final List<ItemData> allData = new ArrayList<ItemData>();
@Mock
private DeliveryItemData item1;
@Mock
private DeliveryItemData item2;
@Mock
private SomeService myService;
@Before
public void setUp() throws Exception {
classUnderTest = new ClassUnderTest();
myService = mock(myService.class);
classUnderTest.setService(myService);
item1 = mock(DeliveryItemData.class);
item2 = mock(DeliveryItemData.class);
}
@Test
public void test_sort() {
createData();
when(myService.getListWithData(inputdata).get().getItemDatas());
when(item1.hasSomething()).thenReturn(true);
when(item2.hasSomething()).thenReturn(false);
}
public void createData() {
item1.setSomeValue("val");
item2.setSomeOtherValue("test");
item2.setSomeValue("val");
item2.setSomeOtherValue("value");
allData.add(item1);
allData.add(item2);
}
classIwantToTest.object.get()
的结果不是一个模拟对象,或者get()
返回了null。但请发布您的代码,显示您的测试和模拟对象的初始化。 - vikingstevefinal
。这是另一个难以追踪的空指针异常的原因。 - 8bitjunkie