如果我的测试中有验证,那么期望是多余的吗?
Is Expectations redundant if I have Verifications in my test?
我对期望和验证的目的和区别感到困惑。例如
@Tested FooServiceImpl fooService;
@Injectable FooDao fooDao;
@Test
public void callsFooDaoDelete() throws Exception {
new Expectations() {{
fooDao.delete(withEqual(1L)); times = 1;
}};
fooService.delete(1L);
new Verifications() {{
Long id;
fooDao.delete(id = withCapture()); times = 1;
Assert.assertEquals(1L, id);
}};
}
首先,如果这个测试不好written/thought,请告诉我。
其次,我的问题:期望部分对我来说似乎是多余的,我想不出一个它不会多余的例子。
Expectations
的目的是允许测试记录模拟方法and/or 构造函数的预期结果,根据被测代码的需要。
Verifications
的目的是允许测试验证对模拟方法and/or 构造函数的预期调用,正如被测代码所做的那样。
因此,通常情况下,测试不会同时记录 和 验证相同的期望(其中 "expectation" 指定一组调用来模拟 methods/constructors 预计会在执行被测代码时发生)。
考虑到这一点,示例测试将如下所示:
@Tested FooServiceImpl fooService;
@Injectable FooDao fooDao;
@Test
public void callsFooDaoDelete() throws Exception {
fooService.delete(1L);
new Verifications() {{ fooDao.delete(1L); }};
}
我对期望和验证的目的和区别感到困惑。例如
@Tested FooServiceImpl fooService;
@Injectable FooDao fooDao;
@Test
public void callsFooDaoDelete() throws Exception {
new Expectations() {{
fooDao.delete(withEqual(1L)); times = 1;
}};
fooService.delete(1L);
new Verifications() {{
Long id;
fooDao.delete(id = withCapture()); times = 1;
Assert.assertEquals(1L, id);
}};
}
首先,如果这个测试不好written/thought,请告诉我。
其次,我的问题:期望部分对我来说似乎是多余的,我想不出一个它不会多余的例子。
Expectations
的目的是允许测试记录模拟方法and/or 构造函数的预期结果,根据被测代码的需要。
Verifications
的目的是允许测试验证对模拟方法and/or 构造函数的预期调用,正如被测代码所做的那样。
因此,通常情况下,测试不会同时记录 和 验证相同的期望(其中 "expectation" 指定一组调用来模拟 methods/constructors 预计会在执行被测代码时发生)。
考虑到这一点,示例测试将如下所示:
@Tested FooServiceImpl fooService;
@Injectable FooDao fooDao;
@Test
public void callsFooDaoDelete() throws Exception {
fooService.delete(1L);
new Verifications() {{ fooDao.delete(1L); }};
}