2015-04-26 4 views
3

Я пытаюсь заставить огурцов работать с весной. В нашем коде мы уже используем конфигурацию 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 "

Цените свою помощь!

+0

может быть, этот ответ может помочь немного http://stackoverflow.com/a/42366378/307699 – nahab

ответ

0

Я использовал несколько источников для определения bean-компонентов. Вы можете использовать это в качестве отправной точки (или других в Интернете, как ваш вопрос довольно старый) Я использую spring4 см другой мой cucumer пост для ПОМ

В настоящее время stepdefs Используйте config.class

@ContextConfiguration(classes = { CucumberConfiguration.class }) 
public class StepdefsTest123 { 

    @Autowired bean; // from cucumberBeanContext.xml 


    @When("^A$") 
    public void a() throws Throwable { 
     System.out.println(bean.getFoo()); 
    } 

} 

в конфигурации классе добавить beandefinitions

фильма
@Configuration 
@ComponentScan(basePackages = "package.here.cucumber") 
@ImportResource("classpath:cucumberBeanContext.xml") 
public class CucumberConfiguration { 

    // nothing to do here 

} 
Смежные вопросы