我想通过模拟外部依赖关系为每个测试用例返回不同的结果来测试方法中的一些情况。但是when
总是返回第一次定义的内容(在此示例中-空集),这破坏了下一个测试。
如果我一个人一个地运行测试,则它们成功通过,但是当我运行整个类时,只有第一个测试通过,而其他则失败。
测试班:
class ExampleTest {
@Mock
private Dao dao;
@Mock
private Validator validator;
@Spy
@InjectMocks
Controller controller;
@BeforeEach
void setUp() {
initMocks(this);
}
private final static Set DATA = Set.of("data1", "data2");
@Test
void firstTest() throws UserDashboardException, DashboardException, WidgetException {
when(validator.filter(DATA)).thenReturn(Collections.emptySet());
assertThrows(Exception.class, () -> controller.create(DATA));
}
@Test
void secondTest() throws UserDashboardException, DashboardException, WidgetException {
when(validator.filter(DATA)).thenReturn(DATA);
controller.create(DATA);
verify(dao, times(1)).create(eq(DATA));
}
}
经过测试的课程:
public class Controller {
private Dao dao;
private Validator validator;
public Controller(Dao dao,Validator validator) {
this.dao = dao;
this.validator = validator;
}
public String create(Set<String> data) {
data = validator.filter(data);
if (data.isEmpty()) {
throw new Exception("Invalid data.");
}
return dao.create(data);
}
}
因此,在两个测试中,
create
方法都会引发异常,这不是我期望的。也许我错过了一点? 最佳答案
您是否尝试过doReturn方法?
doReturn(DATA).when(validator).filter(DATA)
可以从org.mockito.Mockito.doReturn导入;
编辑:您的代码实现中可能存在错误:
data = validator.filter(data);