【问题标题】:How to mock the value of a parameter in a service class如何模拟服务类中参数的值
【发布时间】:2020-05-31 00:51:47
【问题描述】:

如何使用 Junit 测试测试以下服务方法?这是对我的代码的非常简单的重建,并且只是一个示例。 我想在 JUnit 测试中测试,如果 文件字符串为空或 null,会发生什么。 不幸的是,我是使用 JUnit 测试的新手。我已经阅读了一些关于休息控制器和服务的示例,并为我模拟了 repos 和它的方法,但是在这里我不知道它是如何工作的。有人可以帮忙吗?

public class MyService {

    private String fileName = "src/main/resources";
 // or
 // private String fileName = ${modulename.config.filename};
//  @Autowired
//  private RepoService RepoService;

    @EventListener
    public void init(ContextRefreshedEvent event) {
        try {
        myMethod();
        } catch (Exception e) {
            // LOGGING
        };
}


public void myMethod() {

        if(fileName != null && !fileName.isEmpty()) {
            // doSomething with file and IOException
            // save in repo
        } else {
            // LOGGING
        }       
    }
}


    public void myMethod() {        
        if(fileName != null && !fileName.isEmpty()) {
            // doSomething with IOException
        } else {
            // LOGGING
        }       
    }
}

测试应如下所示。我试图在测试中以某种方式设置该值,但它没有意义,并且当时没有设置。

@SpringBootTest
class DemoApplicationTests {

    @Test
    public void fileNameTest() {
        // GIVEN
        //Mockito.when()

        // WHEN

        // THEN
    }

}

【问题讨论】:

  • 当文件名被硬编码时,你为什么要测试fileName?您是否在 MyService 实例的生命周期中更改过文件名?
  • 实际上我会将文件路径和名称放在 application.properties 中。我想对其进行测试,以便在文件位置发生移动的情况下,它也可以工作。

标签: java spring-boot junit mockito


【解决方案1】:

更改私有变量的值使用Field 修改使用Reflection API。 Here 很好地解释了如何做到这一点。

【讨论】:

    猜你喜欢
    • 2019-04-19
    • 2015-09-23
    • 1970-01-01
    • 2023-01-13
    • 1970-01-01
    • 2016-06-29
    • 2019-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多