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

标签 java unit-testing testing junit mockito

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

相关文章:

找不到 PHP 类错误仅发生在 CircleCI 上

ruby-on-rails - block 范围不一致之前的 Rspec

ruby-on-rails - 使用 Shoulda Ruby on Rails 获取 HTTP 响应

visual-studio-2008 - NUnit 和 Microsoft 的单元测试框架 (VS 2008) 之间有真正的区别吗?

java - 如何用一个空行替换多个空格和换行符

java - 如何在 ICEfaces 中选择上传文件的文件名?

Java 应用程序安装到 C :/Program Files - java. io.FileNotFoundException 时无法写入/读取序列化文件:(访问被拒绝)

java - 如何从另一个类访问一个变量?

.net - 在 ASP.NET MVC 中测试 Html Helpers

c# - 您如何在 C# 中模拟文件系统以进行单元测试?