gpt4 book ai didi

java - 单元测试方法在运行测试时不使用模拟对象。而是调用实际的类和方法

转载 作者:行者123 更新时间:2023-12-01 19:30:06 25 4
gpt4 key购买 nike

我有一个要测试的类,名为 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 的新实例。

我哪里出错了?

最佳答案

尝试使用依赖注入(inject)。将 CloudService 设为 ClassToTest 的字段。更改 ClassToTest 的构造函数以接受 CloudService。然后 Mockito 就能够将模拟注入(inject)到单元测试中的 ClassToTest 中。

public class ClassToTest {

private CloudService service;

public ClassToTest(CloudService service) {
this.service = service;
}

public String moveFilesToCloud(String path, String documentclass, String objStore) {
log.info("Moving files to cloud.");
String docId = StringUtils.EMPTY;
try {
docId = service.uploadDocument(path,documentclass,objStore,"");
} catch (CloudException e) {
log.info("* Error uploading reports to cloud *" + e.getMessage());
}
return docId;
}
}

关于java - 单元测试方法在运行测试时不使用模拟对象。而是调用实际的类和方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60011785/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com