Я пытаюсь найти «правильный» способ макетирования конечной точки в интеграционном тесте, который использует поддержку весенних тестов.
Код работает, но мне интересно, если этоправильный способ сделать это.Я посмотрел на тестовый набор для тестирования верблюдов и он advice с , но это бесполезно, когда Spring отвечает за загрузку camelContex в тесте, верно?
Это то, что яесть:
Служба:
@Service
public class FtpOutboundFileStrategy implements OutboundFileExportStrategy {
private final String FTP_PATTERN= "{0}://{1}@{2}";
private final ProducerTemplate producerTemplate;
@Autowired
public FtpOutboundPriceFileStrategy(ProducerTemplate producerTemplate) {
this.producerTemplate = producerTemplate;
}
@Override
public void doExport(OutboundFile file, ExportProperties exportProperties) {
this.producerTemplate.sendBodyAndHeader(createFtpUri(exportProperties),
file.getFileContent(), Exchange.FILE_NAME, file.getFileName());
}
}
Интеграционный тест:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:testDB.xml", "classpath:applicationContext.xml"})
public class FtpOutboundFileStrategyIT {
@EndpointInject(uri = "mock:ftp")
protected MockEndpoint fakeEndpoint;
@Autowired
FtpOutboundFileStrategy ftpOutboundPriceFileStrategy;
@Autowired
protected CamelContext camelContext;
@DirtiesContext
@Test
public void directsToFtpEndpoint() throws Exception {
camelContext.addEndpoint("ftp://foo@localhost", fakeEndpoint);
fakeEndpoint.expectedBodyReceived().equals("This is the file");
ftpOutboundPriceFileStrategy.doExport(new OutboundFile("This is the file"),
new ExportProperties("foo", "localhost"));
fakeEndpoint.assertIsSatisfied();
}
}
Теперь это работает,но мне интересно, если это что-то вроде хака:
camelContext.addEndpoint("ftp://foo@localhost", fakeEndpoint);
Я где-то читал, что использование @EndpointInject(uri = "mock:ftp")
создаст поддельную конечную точку с более высоким значением, чем у FtpEndpoint по умолчанию, но если я оставлю это внетест не пройден, потому что он использует значение по умолчанию.
Еще одна странная вещь заключается в том, что если я использую "ftp *" вместо "ftp: // foo @ localhost" inПриводит нас к выводу, что тест также проваливается, и это заставляет меня поверить, что это неправильный способ сделать это.
Любая помощь очень ценится!