我正在使用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
?
答案 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