Deve rotalarımı düzenleyen bir RouteBuilder
alt sınıfım var. İlkbahar tarafından inşa edilmiştir. Ben yapmak istiyorum neDeve: Yapılandırmadan koşullu bir yol nasıl oluşturulur?
@Override
public void configure() throws Exception {
from(...)
.process(...)
.to(...)
}
yapılandırmasına göre ek bir son nokta yönlendirme ekleyin: Başlangıçta şöyle bir şey görünüyordu. Spring'in RouteBuilder
fasulyesini oluşturmak için kullandığı bir Özellikler dosyası ve ayarladığı alanlardan biri boolean addAnotherEndpoint
'dur. Bu boole doğruysa, başka bir to
eklemek istiyorum. Eğer yanlışsa, şimdiki davranışına geri dönmesini istiyorum. Ben çalışıyorum olsa
@Override
public void configure() throws Exception {
from(...)
.process(...)
.to(...)
.choice()
when(constant(addAnotherEndpoint)).to(...)
.endChoice();
}
Bana bunun özelliklerinden addAnotherEndpoint
değerini çekiyor çünkü (bunun için birim testleri yazma sorunları yaşıyorum istenilen davranışı gibi gözükse de
DÜZENLEME: Ben CamelSpringTestSupport
alt sınıfı kullanarak test ediyorum
(JUnit testleri kullanarak). @Before
yönteminde, tüm uç noktaları alaylarla değiştiren bir AdviceWithRouteBuilder
oluşturur.
@Test
public void testConditionalRouting() throws Exception {
context.start();
MyRouteBuilder routeBuilder = (MyRouteBuilder) applicationContext.getBean("myRouteBuilder");
routeBuilder.setAddAnotherEndpoint(true);
getMockEndpoint("myMockEndpoint").expectedMessageCount(1);
sendMockMessage();
assertMockEndpointsSatisfied();
context.stop();
}
false
için addAnotherEndpoint
ayarlar ve 0 mesajların alındığı iddia karşılık gelen test yoktur: Benim @Test
, ben Özellikleri dosyasından alınır addAnotherEndpoint
değerini geçersiz kılmak için çalışıyorum. Sorun şu ki, bu değişkenin değerini geçersiz kılmak işe yaramaz. Bir sınama geçer ve diğeri, Properties dosyamın true
veya false
olması gerekip gerekmediğine bağlı olarak başarısız olur. Bunun bana önerdiği şey, ayarın geçersiz kılınmasından (ve dolayısıyla bağlam başlamadan önce) rota oluşturulmasından kaynaklanıyor. Bir hata ayıklayıcısını kontrol ettim ve ayarı doğru şekilde geçersiz kılınmış. Sadece herhangi bir etkisi yok gibi görünüyor.
DÜZENLEME 2: benim AdviceWithRouteBuilder
itibaren
:
@Override
public void configure() throws Exception {
replaceFromWith(MOCK_FROM_ENDPOINT);
interceptSendToEndpoint(FIRST_TO_ENDPOINT)
.skipSendToOriginalEndpoint().to(MOCK_FIRST_TO_ENDPOINT);
weaveById(MY_PROCESSOR_ENDPOINT).replace()
.to(MOCK_MY_PROCESSOR_ENDPOINT);
weaveById(SECOND_TO_ENDPOINT).replace()
.to(MOCK_SECOND_TO_ENDPOINT);
}
Bu sahte son nokta ile her VAP değiştirir. Bunlara dayanan 4 testim var ve beklendiği gibi çalışıyorlar, tek sorun koşullu yönlendirme.
JUnit açıklamalarından yapılan Kenara, benim test sınıfında sadece ek açıklamaları yeni İlkbahar Uygulama Bağlam döndüren isUseAdviceWith()
üzerine @Override
(true döndürür) ve createApplicationContext()
vardır.
Testlerimi context.start()
olmadan yürüttüm ve iletilen tek mesaj, 0 iletisinin alındığını gösteren yoldur (rota başlatılmamışsa anlam ifade eder). Bu yüzden bağlamın otomatik olarak başlatıldığına inanmıyorum.
Testim iyiydi ama benim rota oluşturma nasıl yeniden düşünmek zorunda kaldı:
Bu bana çok normal bir yol gibi görünüyor. Tek sorun, test ettiğin gibi olurdu. Canlı bir ortamda, bu rota tamam olmalı. Nasıl test ettiğinizi paylaşabilir misiniz? O zaman bunu da düzeltebiliriz. BTW, yalnızca bir koşulu olan bir Seçim yerine bir Filtre kullanırsanız daha basit olur. –
Öneriniz için teşekkürler. Bunu test etmek için 'CamelSpringTestSupport' alt sınıfını kullanıyorum. Bunu dahil etmek için soruyu güncelleyeceğim. – tytk
Ayrıca AdviceWithRouteBuilder bloğunu da görebilir miyim? Ayrıca, test sınıfınızda herhangi bir ek açıklama var mı? Context.start() öğesini de kaldırabilir misiniz? Testlerinizin başlangıcından itibaren, bağlamın otomatik olarak başlatılıp başlatılmadığını görmek için onları çalıştırın. Eğer öyleyse, sorun var ... –