Установите профиль "test" при запуске "mvn test" - PullRequest
2 голосов
/ 17 октября 2019

Я использую 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

1 Ответ

2 голосов
/ 17 октября 2019

Вы можете использовать аннотацию для запуска тестовых классов с тестовым профилем, выполнив следующие шаги

Шаг 1: Аннотируйте все тестовые классы с помощью @Profile("name") и @ActiveProfiles("name")

  • Profile аннотация используется для выбора указанного профиля
  • ActiveProfiles используется для активации указанного профиля для тестовых классов

Шаг 2: Создайте application.properties или application.yml с именем профиля, например application-test.yml , и поместите его внутри src/main/resources или src/test/resources с тестовыми свойствами

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...