java Spring Boot 'TestPropertySource'不工作

pdtvr36n  于 2023-02-02  发布在  Java
关注(0)|答案(2)|浏览(211)

我有一个简单的单元测试,我想让单元测试加载一个测试属性文件,我已经放置在src/test/resources/test.properties中,而不是src/main/resources/application.properties中的属性文件。
我的测试类设置如下:

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureMockMvc
@TestPropertySource(locations = "classpath:src/test/resources/properties-test.yml")
public class SecurityConfigurationTest {
    @MockBean
    KafkaConfiguration kafkaConfiguration;

    @MockBean
    KafkaMonitor kafkaMonitor;

    @MockBean
    BuildProperties buildProperties;

    @Autowired
    MockMvc mockMvc;

    @Test
    public void unauthorizedUser_shouldNotAccessHomePage() throws Exception{
        mockMvc
                .perform(get("/"))
                .andExpect(status().isUnauthorized());
    }

}

我的项目文件结构如下所示:

但是我收到了以下错误,表明我没有正确指定此属性文件:
Caused by: java.io.FileNotFoundException: class path resource [src/test/resources/test.properties] cannot be opened because it does not exist
我怎样才能在单元测试中使用test.properties文件而不是application.properties文件?

rkkpypqq

rkkpypqq1#

在pom.xml中添加一个profiles标记,它指定程序运行时应该选择哪个属性文件。

<profiles>
    <profile>
        <id>test</id>
        <properties>
            <activatedProperties>test</activatedProperties>
        </properties>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
</profiles>

注意:属性文件的名称必须是application-test.properties
这将使您的测试属性处于活动状态,但要访问它,您需要配置您的测试资源文件夹,并让intellij知道在运行时使用它。
在Intellij中,您可以更改运行项目的资源文件夹,因此您需要......
1.选择测试资源文件夹。
1.右键单击它。在打开的菜单中,选择修改运行配置并创建新配置。
这意味着为运行测试资源文件夹创建了新的运行配置
1.运行配置。

s8vozzvw

s8vozzvw2#

默认情况下,Maven会将src/test/resources/文件夹中的所有文件打包到类路径中,所以要通过类路径引用它,应该是:

@TestPropertySource(locations = "classpath:test.properties")

或者,如果要通过系统文件路径引用它,可以将其更改为:

@TestPropertySource(locations = "file:src/test/resources/test.properties")

在封面下,它使用ResourceLoader来加载文件。

相关问题