使用@ConditionaOnProperty注释的类的Spring和Web集成测试

时间:2016-12-14 22:19:26

标签: java spring spring-mvc spring-boot conditional

我正在使用Spring Boot 1.4.2。

我的服务注释如下

@Service
@ConditionalOnProperty("${my.property.enabled:false}")
public class MyService {

}

我想测试它做集成测试,例如

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment= SpringBootTest.WebEnvironment.RANDOM_PORT)
public class MyServiceTest {

    @Autowired
    private MyService myService;

}

该服务未在测试中自动装配。我想避免在测试文件夹中的属性文件中设置属性。我无法通过MyServiceTest

中的此类注释直接启用该属性

1 个答案:

答案 0 :(得分:1)

更新

正如Stephane在评论中提到的,下面演示的测试用内联属性可以通过@SpringBootTest参数直接在properties中进行,在这种情况下,您不会需要{{1} }}:

@TestPropertySource

原始答案

您可以使用@RunWith(SpringRunner.class) @SpringBootTest(webEnvironment= SpringBootTest.WebEnvironment.RANDOM_PORT, properties = { "my.property.enabled = true" }) public class MyServiceTest { @Autowired private MyService myService; } 直接在测试配置类中内联所需的属性:

@TestPropertySource

另请注意,您已定义的注释不会起作用,也许您打算使用@RunWith(SpringRunner.class) @SpringBootTest(webEnvironment= SpringBootTest.WebEnvironment.RANDOM_PORT) @TestPropertySource(properties = { "my.property.enabled = true" }) public class MyServiceTest { @Autowired private MyService myService; } ,在这种情况下它会起作用:

@ConditionalOnExpression

但是@Service @ConditionalOnExpression("${my.property.enabled:false}") public class MyService { } 更具表现力,在您的情况下可以写成:

@ConditionalOnProperty