Я использую Spring @Profile
, чтобы отделить связанные с тестами классы от dev и prod. У меня проблемы с поиском способа установить spring.profiles.active
в test
в pom.xml, только для цели test
. Другими словами, если целью maven является test
, я хочу запустить это:
mvn test
и все равно добраться до аннотированных классов @Profile ("test"),
вместо этого:
mvn test -Dspring.profiles.active=test
Так как он определяет "тестовую" натуру прогона дважды.
Возможно ли это?
ОБНОВЛЕНИЕ : добавлен код
Следующие два сервиса предназначены для тестов и dev / prod. Оба реализуют один и тот же интерфейс 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);
}
}
application.properties, который находится в каталоге test / resources:
spring.profiles.active=test