У меня есть два сомнения:
a.Как смоделировать http4-компонент таким образом, чтобы мой маршрут не знал, когда он будет смоделирован и когда он реален?
b.Как инициализировать myDestinationEndpoint при запуске тестов?
package my.package
@Component
public class MyRoute extends RouteBuilder {
@Value("${MY_DESTINATION_ENDPOINT}")
private String myDestinationEndpoint;
from("direct:my-route")
.split()
.method(MyBean.class,"split") //splits the message in two messages. One will pass and other will be redirect to http4
.aggregationStrategy(MyBean.aggregator()) //After redirect to http4, the response will be added to the first message and continue to the next route.
.choice()
.when().method(MyBean.class,"shouldRedirect")
.to("http4:" + myDestinationEndpoint + "?bridgeEndpoint=true") //How to mock here???
.unmarshal(new JacksonDataFormat(Object.class))
.end()
.end()
;
}
Что пробовали?
a.Для того, чтобы издеваться, я нашел компонент «макет».Но в этом случае мне сложно кодировать макет на маршруте.Мне кажется, что у меня есть один тестовый код с макетом для запуска в тестовой среде и другой подобный код без макета для запуска в производстве.Но, насколько я понимаю, тестовый код должен быть тем же самым рабочим кодом.
.when().method(MyBean.class,"shouldRedirect")
.to("mock:" + myDestinationEndpoint)
Я ожидал, что макет работал как интерфейс, и в производстве я должен внедрить реальный объект, а в тесте я должен внедритьподдельный / фиктивный объект.
b.Как я застрял на шаге а.У меня не так много времени, чтобы исследовать это.Запустив em localhost, я установил myDestinationEndpoint в качестве аргумента Java-программы в eclipse.При запуске em QA и PRD я использую файл configmap (.yml).
РЕДАКТИРОВАТЬ: пытаясь реализовать предложение ShellDragon.
Я реализовал этот тестовый класс, и я получил эту ошибку:
org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.
Я добавил файл FirstTest.properties в / src / test / resources и / src / test / resources / my / package
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
@ContextConfiguration(classes = AgenciaInternalRoute.class) //Classe que contém valores a serem injetados
@TestPropertySource //flag que faz com que a classe indicada em @ContextConfiguration receba os valores de um arquivo de propriedades
public class FirstTest extends CamelTestSupport {
@Autowired
private TestRestTemplate restTemplate;
@Override
protected RouteBuilder createRouteBuilder() throws Exception{
return new MyRoute();
}
@Test
public void simpleTest() {
}
}