Я пытаюсь заставить огурцов работать с весной. В нашем коде мы уже используем конфигурацию Spring на основе Java. У меня возникли проблемы с его работой в следующем сценарии. Кто-то может помочь?Использование различных конфигураций весеннего контекста на основе java с огурцом
Сегодня в наших тестовых классах интеграции мы используем @ContextConfiguration для каждого класса и предоставляем класс конфигурации, объявленный в этом классе тестирования интеграции для загрузки bean-компонентов. Класс Config аннотируется с @Configuration. Один и тот же компонент может быть создан по-разному в двух классах классов классов, используемых в двух разных классах тестов интеграции.
Итак, когда я использую Cucumber, так как Contextconfiguration отличается от разных классов, он ищет «Cucumber.xml». В xml-файле я использую компонентное сканирование для сканирования классов определения шага окуня, указав имя пакета, которое используют эти классы (оба класса имеют одинаковое имя пакета). Поскольку все бобы загружаются в том же контексте, Cucumber не загружает бобы, когда находит тот же компонент, определенный в этих разных конфигурационных классах.
Как мне решить эту проблему создания одного и того же компонента, но по-разному и использовать их в разных классах?
Обратите внимание, что я не ищу решение, которое создает много оттока из существующих методов кодирования, поэтому наличие файла per-test-xml не является для меня вариантом.
Вот как наш код выглядит: NameAndAddressProviderIntegrationTestSteps
Класс: -
@ContextConfiguration(locations="classpath:cucumber.xml")
public class NameAndAddressProviderIntegrationTestSteps {
@Configuration
@Import({
xyz.class,
abc.class,
NameAndAddressProvider.class
})
@ImportResource({
"file:configuration/spring-configuration/abc.xml",
"file:configuration/spring-configuration/xyz.xml"
})
public static class Config {
@Bean
AccountHolderDataMap dataMap() {
AccountHolderDataMap data = new AccountHolderDataMap();
data.put(ID,
new AccountHolderData(customerID));
data.get(customerID).setCustomerplaceID(testCustomerplaceID);
return data;
}
}
@Inject
private NameAndAddressProvider provider;
@When("^I call nameandAddress provider with a 'customerId'$")
public void i_call_nameandAddress_provider_with_a_customerId() throws DependencyException {
System.out.println("Entering when method");
names = provider.getNames(customerID);
System.out.println(provider.toString());
}
......
}
Класс AddressProviderIntegrationTestSteps: -
@ContextConfiguration(locations="classpath:cucumber.xml")
public class AddressProviderIntegrationTestSteps {
@Configuration
@Import({
abc.class,
xyz.class,
AddressesProvider.class
})
@ImportResource({
"file:configuration/spring-configuration/test-environment.xml",
"file:configuration/spring-configuration/test-logging-config.xml"
})
public static class Config {
@Bean
@DependsOn("Environment")
AccountHolderDataMap data() {
AccountHolderDataMap data = new AccountHolderDataMap();
data.put(testCustomerID,
new AccountHolderData(testCustomerID, testCustomerplaceID,businessType));
return data;
}
}
private static final String testCustomerID = "1234";
private static final String testMarketplaceID = "abc";
@Inject
private AddressesProvider provider;
@When("^I call AddressesProvider provider with a 'CustomerID'$")
public void i_call_AddressesProvider_provider_with_a_CustomerID() throws Throwable {
List<Address> addresses = provider.getAddresses(testCustomerID);
Log.info(addresses.get(0).toString());
assertTrue(addresses.size()==1);
}
}
И вот вложенное исключение, которое я получаю: - «Вложенное исключение - это org.springframework.beans.factory.NoUniqueBeanDefinitionException: не определено квалификационный компонент типа [.... AccountHolderDataMap]: ожидаемый единичный совместимый компонент, но найден 2 : dataMap, data "
Цените свою помощь!
может быть, этот ответ может помочь немного http://stackoverflow.com/a/42366378/307699 – nahab