2012-05-25 4 views
2

Я создаю проект, используя новые конфигурации Spring. У меня есть базовый класс, который содержит несколько свойств:Правильное наследование для весенних конфигураций

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(classes = {Basic.class, Protected.class}) 
public class BaseTest { 
    @Autowired(required = false) protected String userName; 
    @Autowired(required = false) protected String password; 
    @Autowired protected String baseURL; 

    @Test 
    public void outputData() { 
    System.out.println("UserName: " + userName + " Password: " 
         + password + "Base URL: " + baseURL); 
    } 
} 

@ActiveProfiles("default,protected") 
public abstract class ProtectedTest extends BaseTest 
{ 
    @Autowired protected String userName; 
    @Autowired protected String password; 
} 

@Configuration @Profile("default") 
public class Basic { 
    @Bean public String baseURL() { return "http://www.baseURL.com"; } 
} 

@Configuration @Profile("protected") 
public class Protected { 
    @Bean public String userName() { return "userName"; } 
    @Bean public String password() { return "password"; } 
} 

Однако, когда я иду, чтобы запустить мои защищенные тесты я получил уведомление о том, что базовый URL не подключен должным образом. Поскольку он расширяет BaseTest и имеет оба профиля активными, почему я не получаю bean baseURL?

ответ

1

Он должен быть @ActiveProfiles({"default","protected"}), в вашем случае это будет предполагать, что профиль по имени default, protected активен, не default и protected

Еще одна вещь, что аннотаций в базовом классе BaseTest не является производным от ProtectedTest, поэтому вам снова нужно будет положить @RunWith и @ContextConfiguration для вашего теста на запуск

+1

Это был долгий день, и я только что скопировал это из моей конфигурации переменной окружения. Однако здесь есть две вещи: вам не нужно добавлять RunWith в [расширенные классы] (http://junit.sourceforge.net/javadoc/org/junit/runner/RunWith.html) или ContextConfigurations [ они наследуют по умолчанию] (http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/test/context/ContextConfiguration.html#inheritLocations()) – Scott