Java Spring引导访问JUnit测试的application.properties

Java Spring引导访问JUnit测试的application.properties,java,spring,maven,spring-boot,junit,Java,Spring,Maven,Spring Boot,Junit,我正在尝试从Spring Boot应用程序中的JUnit中访问application.properties或application-test.properties 我一直在寻找不同的方法来处理堆栈溢出,只希望使用我的AppConfig类(见下文) 我使用SpringBoot1.5.6版本和Java1.8 以下是我的应用程序的结构: MyService pom.xml src ├───main │ ├───java │ │ └───com

我正在尝试从Spring Boot应用程序中的JUnit中访问application.properties或application-test.properties

我一直在寻找不同的方法来处理堆栈溢出,只希望使用我的AppConfig类(见下文)

我使用SpringBoot1.5.6版本和Java1.8


以下是我的应用程序的结构:

MyService
    pom.xml
    src
    ├───main
    │   ├───java
    │   │   └───com
    │   │       └───myservice
    │   │           ├───config
    │   │           │       AppConfig.java
    │   │           └───controller
    │   │           │       UserController.java
    │   │           │ 
    │   │           └─── MyServiceApplication.java    
    │   ├───resources
    │   │      application.properties
    └───test
        ├───java
        │     └───com
        │         └───myservice
        │               └───controller
        │                    UserControllerTest.java
        └───resources
                application-test.properties    

com.myservice.config.AppConfig:

@Configuration
public class AppConfig {

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

    // Getters & setters omitted for brevity
}
main/resources/application.properties:

server.contextPath=/MyService
server.port=8080

# users dir
userDir=/opt/users
test.resources/application-test.properties

# users dir
userDir=/opt/users
我能够在我的主Spring引导应用程序中获取并解析此目录,但是当我试图从JUnit测试类getAllUsers()测试方法中获取它时,我得到了一个NullPointerException:

@RunWith(SpringRunner.class)
@WebMvcTest(UserController.class)
@ContextConfiguration(initializers = ConfigFileApplicationContextInitializer.class)
@ActiveProfiles("test")
public class UserControllerTest {

    @Autowired
    MockMvc mvc;

    @MockBean
    AppConfig config;

    @MockBean
    UserService userService;

    @Test
    public void getAllUsers() throws Exception {
        User users = new User(config.getUserDir());

        // more lines of code
    }
}

对于堆栈溢出,有多种方法可以实现这一点,我将其理解为:

  • JUnit类可以从main/resources/application.properties读取application.properties
  • 使用
    this.class.getClassLoader.getResourceAsStream(…)
    //希望使用我的AppConfig.class
问题:

  • 我可能做错了什么,应该从application.properties文件还是从test-properties.file读取

  • 如何配置@ActiveProfiles(“test”),我应该在Maven pom.xml的某个地方设置它吗

  • 我是否需要将AppConfig放在test/java/com/myservice/config下的源文件夹中


  • 将以下注释添加到测试类:

    @TestPropertySource(locations="classpath:application-test.properties")
    
    这将使您能够工作:)请注意,您必须导入它:

     import org.springframework.test.context.TestPropertySource;
    
    您可以在测试类中使用@TestPropertySource注释

    只是注释
    @TestPropertySource(“classpath:config/testing.properties”)
    在 考试班

    您应该能够读取属性,例如使用 @值注释

    您的配置如下
    src/main/resources/config/testing.properties


    您的测试类定义了
    @MockBean-AppConfig
    因此它使用模拟AppConfig而不是加载应用程序属性的真实AppConfig。请避免要求人们以某种方式投票或不投票。这没有帮助,如果你把注意力吸引到不应该投票的事情上,人们可能会更仔细地观察,无论如何都会这样做。无论如何,我们希望这里的投票是有机的。你找到解决办法了吗?
    @Value("${fromTest}")
    private String fromTest;