Spring mvc @测试期间@component筛选器内的值不可见

Spring mvc @测试期间@component筛选器内的值不可见,spring-mvc,spring-boot,mockito,Spring Mvc,Spring Boot,Mockito,我创建了用于记录和保存所有请求的筛选器,这是其中的一部分: @Component public class RequestFilter extends OncePerRequestFilter { @Value("${app.endpoint}") private String requestMapping; private final RequestRepository requestRepository;

我创建了用于记录和保存所有请求的筛选器,这是其中的一部分:

    @Component
    public class RequestFilter extends OncePerRequestFilter {

         @Value("${app.endpoint}") 
         private String requestMapping;

        private final RequestRepository requestRepository;

        @Autowired
        public RequestFilter(RequestRepository requestRepository) {
            this.requestRepository = requestRepository;
        }
....
    }
当应用程序运行时,从spring上下文正确读取requestMapping,但是 当我为该筛选器创建测试时,requestMapping为null

@SpringBootTest
@RunWith(SpringRunner.class)
@AutoConfigureTestDatabase(connection = EmbeddedDatabaseConnection.H2)
@ContextConfiguration(classes = {MyApplication.class})
@AutoConfigureMockMvc
@ActiveProfiles("test")
public class FilterTest  {

    @Autowired
    private WebApplicationContext webApplicationContext;

    @Autowired
    private RequestRepository requestRepository;

    @Autowired
    protected MockMvc mockMvc;

    @Before
    public void setup() {

        RequestFilter rpmRequestFilter = new RequestFilter(this.requestRepository);

        mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext)
                .addFilter(invalidVpmRequestFilter)
                .build();
    }

}
当然,在application-test.properties中,我配置了这个属性:

app.endpoint=/log/save

有人知道问题出在哪里吗?为什么这在测试中不起作用?

正如M.Deinum指出的,问题在于您正在创建RequestFilter的实例,如果您希望Spring在其中注入components@Autowired或propoerties@Value,您必须让Spring按如下方式处理实例化:

@....
public class FilterTest  {
  ....
  @Autowired
  RequestFilter requestFilter;

  @Before
  public void setup() {
    mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext)
            .addFilter(requestFilter)
            .build();
  }
}

它工作起来就像它应该工作一样。您正在自己创建过滤器的新实例,而不是让Spring管理过滤器。