弹簧启动测试,无法加载 junit 测试的属性文件



这是我的项目结构

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.urlsoapTest.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)

最新更新