在Spring Boot测试中使用属性文件

Bub*_*lik 3 java testing spring spring-boot

我有简单的Spring Boot Web服务,在其中使用.properties文件进行配置。作为春季邮件配置的示例,我mailing.propertiessrc/main/resources/config/文件夹中有一个单独的文件。

在主应用程序中,我使用以下命令将其包括在内:

@PropertySource(value = { "config/mailing.properties" })
Run Code Online (Sandbox Code Playgroud)

问题出现在测试时,我想使用该文件中的相同属性,但是当我尝试使用它时,我得到了fileNotFaundExeption

问题是:

  • 我应该在src/test文件夹中拥有单独的资源,还是可以从src/main文件夹访问资源,如果可以,如何?

UPDATE添加了源

测试类别:

    @RunWith(SpringRunner.class)
@SpringBootTest
@TestPropertySource("classpath:config/mailing.properties")
public class DemoApplicationTests {

    @Autowired
    private TestService testService;

    @Test
    public void contextLoads() {
        testService.printing();
    }

}
Run Code Online (Sandbox Code Playgroud)

服务等级:

    @Service
public class TestService
{
    @Value("${str.pt}")
    private int pt;

    public void printing()
    {
        System.out.println(pt);
    }
}
Run Code Online (Sandbox Code Playgroud)

主要应用类别:

@SpringBootApplication
@PropertySource(value = { "config/mailing.properties" })
public class DemoApplication {

    public static void main(String[] args)
    {
        SpringApplication.run(DemoApplication.class, args);
    }
}
Run Code Online (Sandbox Code Playgroud)

结构体

Pat*_*ick 5

您可以@TestPropertySource在测试类中使用注释。

例如,您在mailing.properties文件中具有以下属性:

mailFrom=fromMe@mail.com

只是注释@TestPropertySource("classpath:config/mailing.properties")您的测试课。

您应该能够读出带有@Value注释的属性。

@Value("${fromMail}")
private String fromMail;
Run Code Online (Sandbox Code Playgroud)

为了避免在多个测试类上对此注释添加注释,您可以实现一个超类或元注释


编辑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);
}
Run Code Online (Sandbox Code Playgroud)

MailService:

@Service
public class MailService {

    @Value("${mailFrom}")
    private String mailFrom;

    public String getMailFrom() {
        return mailFrom;
    }

    public void setMailFrom(String mailFrom) {
        this.mailFrom = mailFrom;
    }
}
Run Code Online (Sandbox Code Playgroud)

DemoTestFile:

@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);
    }
}
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明