У меня есть следующая конфигурация весеннего теста с различными профилями:
@Configuration
@ComponentScan (value = {"uk.co.test.ws" })
public class SpringTestConfig
{
@Profile( "local")
@PropertySource( "classpath:/config/local/settings.properties" )
public static class SpringTestConfigLocal
{
@Autowired
private Environment environment ;
@Bean(name= "baseUrl" )
public String setBaseUrl()
{
return environment .getRequiredProperty("baseurl.protocol" )+"://" +environment .getRequiredProperty( "baseurl.host");
}
}
а затем создал базовый класс, который принимает базовый url
> @RunWith (SpringJUnit4ClassRunner. class) @ContextConfiguration
> (classes = { SpringTestConfig. class }) public class BaseWsTest {
> @Autowired
> String baseUrl;
который затем распространяется на другие классы тестов, как показано ниже:
public class SampleFTest extends BaseWsTest
{
@Test
public void hello() throws FileNotFoundException, Exception
{
System. out .println("base url: " + baseUrl );
При запуске с использованием обычной maven clean install тесты работают, но если я должен был запустить его, щелкнув правой кнопкой мыши метод, он получит
Error creating bean with name 'uk.co.test.ws.service.base.SampleFTest': Injection of autowired dependencies failed;
Вы забыли выбрать профиль в классе SampleFTest
, вы должны добавить эту строку:
@ActiveProfiles(profiles = "local")
Таким образом, SpringTestConfigLocal
будет инициализирован и доступен baseUrl
EDIT: я бы добавил свойство в файл .properties
чтобы я мог использовать переменную myprofile:
@ActiveProfiles(profiles = "${myprofile}")
И в конце концов, если вы не хотите время от времени менять значение, я бы применил некоторую логику, чтобы загрузить один файл свойств или другой.
EDIT 2: Извините, но это не работает, потому что файл загружается после добавления значения EL аннотации, но вы можете добавить это:
spring.profiles.active=local
в файл свойств, и это сделает то же самое, что и аннотация @IntegrationTest("local")
. Это код, который я пробовал:
@TestPropertySource(value="classpath:/config/test.properties")//, properties={"myaddress=cane", "myprofile=local"})
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@WebAppConfiguration
@IntegrationTest("${myaddress}")
//@ContextConfiguration
//@ActiveProfiles(profiles = "${myprofile}")
public class BasicJUnitTest{
protected Logger logger;
protected MockMvc mockMvc;
@Autowired
private Environment env;
@Value("${myaddress}" )
String myval;
public BasicJUnitTest(){
this.logger = LoggerFactory.getLogger(this.getClass());
}
@Test
public void test(){
logger.info("hola"+myval+ " " + env.getActiveProfiles()[0]);
}
}