gpt4 book ai didi

java - 我可以在我的一个测试类中获得 Spring @Value,但不能在其他测试类中获得 Spring @Value

转载 作者:行者123 更新时间:2023-12-01 17:54:03 24 4
gpt4 key购买 nike

我正在使用 JUnit 测试一个项目,它将从 application-test.properties 中获取一些值。

我创建了一个名为 TestPropertiesProvider 的类,该类旨在获取值并将它们发送到我的测试类,但在我的测试类中不起作用,我可以毫无问题地获取值!

这是我的测试课。 (这里我的值注释正在工作并且我得到了我的 Prop )。

@SpringBootTest
@TestPropertySource(locations = "classpath:application-test.properties")
@TestInstance(Lifecycle.PER_CLASS)
// The annotations SpringBootTest, and TestPropertySource, shouldn't be here, just put them to see if i could
// get the values here.
public class ODServiceImplTest {

@Value("${ondemand.server.port}")String si; // THIS IS WORKING, BUT I DONT WANNA USE THE @Value HERE!
ODService odService = new ODServiceImpl();
TestPropertiesProvider propsProvider = new TestPropertiesProvider();

@BeforeEach
void setUp() {
ReflectionTestUtils.setField(odService, "converterFactory", new ConverterFactory());
ReflectionTestUtils.setField(odService, "SERVER_NAME", propsProvider.getSERVER_NAME());
ReflectionTestUtils.setField(odService, "SERVER_PORT", propsProvider.getSERVER_PORT());
ReflectionTestUtils.setField(odService, "USER_ID", propsProvider.getUSER_ID());
ReflectionTestUtils.setField(odService, "PASSWORD", propsProvider.getPASSWORD());
}

@Test
void getDocumentDtoByValueTest() {
...
...

这是我的 TestPropertiesProvider 类,我希望在这里获取我的值,因此通过 getter,我可以在这里使用它们。

@SpringBootTest
@TestPropertySource(locations = "classpath:application-test.properties")
@Component
public class TestPropertiesProvider {

// Connection params.
@Value("${ondemand.server.port}")String si; // THIS IS NOT WORKING, I WANT THIS TO WORK.
private final String USER_ID = "DH01A";
private final String PASSWORD = "AR2SB";
private final String SERVER_NAME = "servername...";
private final String SERVER_PORT = "1415";

// Example values for OnDemand searchs.
private final String CORRECT_FOLDER_NAME = "DECF001";
private final String CORRECT_FOLDER_NAME_2 = "DH0001";
private final String NRO_ENVIO_SEARCH_VALUE = "20180500022E";
private final String NRO_ENVIO_SEARCH_FIELD = "NRO_ENVIO";
private final String PDF_FORMAT = "PDF";

// Utility methods and getters...
...
...

希望大家能帮帮我,谢谢!我正在使用 Spring Boot 和 JUnit 5。

更新:不工作的 @Value 在变量上设置 null 。我的两个 java 类位于同一个应用程序中,位于“src/test/java/”,但位于不同的包中。我的应用程序在“src/test/resources/”文件夹中只有一个“application-test.properties”。

最佳答案

最后我可以解决这个问题,添加注释@TestInstance(Lifecycle.PER_CLASS)。

这样:

@SpringBootTest
@TestPropertySource(locations = "classpath:application-test.properties")
@TestInstance(Lifecycle.PER_CLASS)
@Component
public class TestPropertiesProvider {
...
...

我真的不知道这是如何工作的,但解决了我的问题。如果有人可以向我解释,我将非常感激!在文档中搜索表明我的实例将只是我所有测试的 TestPropertiesProvider 之一,但这并不能解释我遇到的问题。

关于java - 我可以在我的一个测试类中获得 Spring @Value,但不能在其他测试类中获得 Spring @Value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60749394/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com