这是我的项目结构
src/main/java
/main/ApplicationContext.java
src/main/resource/
/application-context.xml
/conf/soap.properties
src/test/java
/main/TestApplicationContext.java
src/test/resource/
/application-context-test.xml
/confTest/soapTest.properties
然后TestApplicationContext.java
@SpringBootApplication
@ImportResource("classpath:application-context-test.xml")
@ActiveProfiles("test")
public class TestApplicationContext {
public static void main(String[] args) {
SpringApplication.run(TestApplicationContext.class, args);
}
}
以及我如何加载特定于 Junit 测试的属性
@ActiveProfiles("test")
@SpringBootTest
@ContextConfiguration(classes = {TestApplicationContext.class})
@AutoConfigureWireMock(port = 8081, httpsPort = 443)
@TestPropertySource(locations = {"classpath:confTest/soapTest.properties"})
@RunWith(SpringJUnit4ClassRunner.class)
public class ApplicationTest {
@Test
void testABC(){
//test here
}
}
但似乎confTest/soapTest.properties
文件中的属性无法在运行时加载
它显示消息Could not resolve placeholder 'service.test.url' in value "${service.test.url}"
事实上,该service.test.url
soapTest.properties
我知道这可能是一个重复的问题,但我用谷歌搜索并尝试了许多解决方案,但对我不起作用
我的配置有问题吗
@Ryo...使用这个 可以在测试类中使用@TestPropertySource
注释。
例如,您的 mailing.properties 文件中有此属性:
mailFrom=fromMe@mail.com
只需在测试类上注释@TestPropertySource("classpath:config/mailing.properties")
即可。
例如,您应该能够读出属性,例如使用@Value
注释。
@Value("${fromMail}")
private String fromMail;
若要避免在多个测试类上批注此注解,可以实现超类或元注解。
编辑1:
@SpringBootApplication
@PropertySource("classpath:config/mailing.properties")
public class DemoApplication implements CommandLineRunner {
@Autowired
private MailService mailService;
public static void main(String[] args) throws Exception {
SpringApplication.run(DemoApplication.class, args);
}
@Override
public void run(String... arg0) throws Exception {
String s = mailService.getMailFrom();
System.out.println(s);
}
邮件服务:
@Service
public class MailService {
@Value("${mailFrom}")
private String mailFrom;
public String getMailFrom() {
return mailFrom;
}
public void setMailFrom(String mailFrom) {
this.mailFrom = mailFrom;
}
}
演示测试文件:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = DemoApplication.class)
@TestPropertySource("classpath:config/mailing.properties")
public class DemoApplicationTests {
@Autowired
MailService mailService;
@Test
public void contextLoads() {
String s = mailService.getMailFrom();
System.out.println(s);
}
}
是的@Ryo...您的正确 使用这个@Order(Ordered.HIGHEST_PRECEDENCE + 99)