我正在使用Spring的@Profile
将测试相关的类与dev和prod分开。我很难找到一种方法来将pom.xml中的spring.profiles.active
设置为test
,仅用于test
目标。换句话说,如果行家目标是test
,我想运行它:
mvn test
仍然可以访问带有注解@Profile(“ test”)的类,
代替这个:
mvn test -Dspring.profiles.active=test
两次指定运行的“测试”性质。
有可能吗?
更新:添加了代码
以下两项服务分别用于测试和开发/生产。两者都实现了相同的接口MyService
用于测试环境的MyService:
@Service
@Profile("test")
@ActiveProfiles("test")
public class TestMyServiceImpl implements MyService {
@Override
public String myMethod(){
...
}
}
用于开发环境的MyService:
@Service
public class DevMyServiceImpl implements MyService {
@Override
public String myMethod(){
...
}
}
自动连接MyService的控制器:
@RestController
@RequestMapping
public class MyController {
@Autowired
private MyService myService;
@RequestMapping(value = /myendpoint, method = RequestMethod.POST)
public @ResponseBody Response foo(@RequestBody String request) {
Response response = new Response();
response.setResult(myService.myMethod());
return response;
}
}
测试MyController的测试:
@Test
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class MyControllerTest extends AbstractTestNGSpringContextTests {
@Autowired
private TestRestTemplate restTemplate;
@LocalServerPort
int randomServerPort;
@BeforeSuite
public void config () {
}
@Test
public void testFoo() throws Exception {
final String baseUrl = "http://localhost:" + randomServerPort + "/myendpoint";
URI uri = new URI(baseUrl);
HttpHeaders headers = new HttpHeaders();
HttpEntity request = new HttpEntity<>(headers);
headers.set("X", "true");
ResponseEntity<String> result = this.restTemplate.postForEntity(uri, request, String.class);
}
}
test / resources目录中的application.properties:
spring.profiles.active=test
答案 0 :(得分:2)
您可以按照以下步骤使用批注来运行带有测试配置文件的测试类
步骤1:使用@Profile("name")
和@ActiveProfiles("name")
Profile
注释用于拾取指定的配置文件ActiveProfiles
用于激活测试类的指定配置文件 步骤2:使用配置文件名称(如 application-test.yml )创建application.properties
或application.yml
并将其放在src/main/resources
内或具有测试属性的src/test/resources