我想通过模拟外部依赖关系来测试方法中的一些案例,以便为每个测试案例返回不同的结果。但是 when
总是返回第一次定义的内容(在本例中 - 空集),这会破坏接下来的测试。
如果我逐个运行测试,它们会成功通过,但当我运行整个类(class)时,只有第一个测试通过,其他测试失败。
测试类:
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);
关于java - 始终应用的方法的第一次模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58408839/