【发布时间】:2020-05-17 14:08:31
【问题描述】:
我有一个名为 ClassToTest 的类要测试。它调用 CloudService 来上传文件。
public class ClassToTest {
public String moveFilesToCloud(String path, String documentclass, String objStore) {
log.info("Moving files to cloud.");
String docId = StringUtils.EMPTY;
CloudService service = new CloudService();
try {
docId = service.uploadDocument(path,documentclass,objStore,"");
} catch (CloudException e) {
log.info("* Error uploading reports to cloud *" + e.getMessage());
}
return docId;
}
}
下面是测试类。测试类有一个 CloudService 的模拟对象。当我运行测试而不是获取模拟对象时,实际的 CloudService 会执行并失败。
@Mock
CloudService cloudService;
@InjectMocks
ClassToTest classToTest;
@Test
public void testMoveFilesToCloud() throws Exception {
String pass = "pass";
when(cloudService.uploadDocument("abc","def","ghi","")).thenReturn(pass);
String result = classToTest.moveFilesToCloud("abc","def","ghi");
assertEquals(result,pass);
}
我希望在执行此行时使用 CloudService 的模拟对象 -
CloudService 服务 = new CloudService();
相反,它实际上是在尝试创建一个新的 CloudService 实例。
我哪里错了?
【问题讨论】:
-
尝试使用依赖注入。使 CloudService 成为 ClassToTest 的一个字段。更改 ClassToTest 的构造函数以接受 CloudService。然后 Mockito 能够在您的单元测试中将模拟注入 ClassToTest。
标签: java unit-testing testing junit mockito