spring - 使用 Mockito 测试 @ConfigurationProperties

标签 spring testing mockito

我有配置类:

@ConfigurationProperties(prefix = "myConfig")
public class MyConfig {
    protected String config;
}

我的服务使用这个配置类(从 application.yml 获取值):

@Service
public class myService {

    @Inject
    private MyConfig myConfig;

    Public String getInfo (String param) {
        if (isEmpty(param)) { throw new InvalidParameterException; }
        return myConfig.getConfig();
    }
}

我正在尝试使用 Mockito 对其进行测试:

@RunWith(MockitoJUnitRunner.class)
public class myTest {

    @InjectMocks
    private MyService myService;

    @Mock
    private MyConfig myConfig;

    @Test
    public void myTest1() {
        myService.getInfo("a");
    }

    @Test
    public void myTest2() {
        assertThrows(InvalidParameterException.class, ()->myService.getInfo(null));
    }
}

myTest 失败,因为配置类是模拟的,因此具有空值。 使用 Mockito 测试配置类的正确方法是什么?

编辑: 我在 myService 中使用了很多类似上面的配置类。

最佳答案

您需要创建 getter,然后 Mockito 可以模拟它。

@ConfigurationProperties(prefix = "myConfig")
public class MyConfig {
    protected String config;

    public String getConfig() {
        return config;
    }
}

.

@RunWith(MockitoJUnitRunner.class)
public class myTest {

    @InjectMocks
    private MyService myService;

    @Mock
    private MyConfig myConfig;

    @Before
    private void initializeConfig() {
        when(myConfig.getConfig()).thenReturn("someValue");
    }

    @Test
    public void myTest1() {
        myService.getInfo("a");
    }
}

但是如果您不想在测试中显式设置该值,您应该创建一个 Spring 集成测试,它会创建整个上下文并使用真实对象。但这超出了这个问题的范围。

关于spring - 使用 Mockito 测试 @ConfigurationProperties,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57304149/

相关文章:

java - Hazelcast 的 IScheduledExecutorService 无法序列化任务

javascript - React 应用程序中的失败测试

java - 使用 Mockito 测试方法调用

java - 模拟链调用涉及 Java 中的 Stream

spring - 为 Rest Api 实现 Spring Security

java - 像 livejournal 一样显示消息树(java)

java - @MessageMapping 返回上的 STOMP header

c++ - 如何测试某些代码不能用 C++ 编译?

spring - Maven/ Spring : Automatic Test Run of Generated WAR

unit-testing - 如何使用 Scalatra、Specs2、Mockito 重置模拟调用计数器