Я пытаюсь написать интеграционный тест для моего приложения. Ниже приведен код:
@SpringBootTest(classes = MainApplication.class, args = "ACTIVE")
@TestPropertySource(locations = "/myproperties.properties", properties={"server.port=9010"})
@ActiveProfiles("test")
@RunWith(SpringRunner.class)
@WebAppConfiguration("src/test/resources")
@TestConfiguration
public class MainApplicationIntegrationTest {
@Autowired
private MyRepository myRepository;
@MockBean
private PureRestController controller;
@Autowired
private ApplicationContext ctx;
@Autowired
private ApplicationSummaryService summaryService;
@BeforeClass
public static void setup() {
System.setProperty("feedtype", FeedType.ACTIVE.getValue());
}
@Test
public void runMainApplicationWithActiveFeed() throws Exception {
CommandLineRunner runner = ctx.getBean(CommandLineRunner.class);
Map<String,String> queryParam = new HashMap<>();
// Auth type will never be removed
queryParam.put("auth", "oauth");
given(controller.getData(FeedType.ACTIVE, "",
queryParam)).willReturn(TestingUtils.getMockPureApiResponse(TestingUtils.VALID_ACTIVE_FILE));
runner.run("ACTIVE");
assertThat(myRepository.count(), is(3L));
}
Проблема здесь в том, что приложение spring запускается перед выполнением функции runMainApplicationWithActiveFeed (). После завершения он переходит к этой функции runMainApplicationWithActiveFeed () и снова запускает приложение. Разница в том, что во 2-м прогоне он может теперь высмеивать некоторые вещи перед выполнением теста.
То, чего я пытаюсь достичь, это: макетировать все необходимые вещи, а затем выполнить мой интеграционный тест. Здесь я хочу избежать первого запуска (потому что он автоматически срабатывает). После того, как все проверено, я смогу запустить приложение.