【问题标题】:@Value not visible inside @component filter during tests@Value 在测试期间在@component 过滤器中不可见
【发布时间】:2018-08-23 06:20:16
【问题描述】:

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

    @Component
    public class RequestFilter extends OncePerRequestFilter {

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

        private final RequestRepository requestRepository;

        @Autowired
        public RequestFilter(RequestRepository requestRepository) {
            this.requestRepository = requestRepository;
        }
....
    }

当应用程序运行时,requestMapping 会从 spring 上下文中正确读取,但是 当我为该过滤器创建测试时 requestMapping 为空

@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

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

【问题讨论】:

  • 它应该可以正常工作。您正在自己创建过滤器的新实例,而不是让 Spring 管理过滤器。

标签: spring-mvc spring-boot mockito


【解决方案1】:

正如 M. Deinum 指出的那样,问题在于您正在创建 RequestFilter 的实例,如果您希望 Spring 在其中注入组件 (@Autowired) 或属性 (@Value),您必须让Spring 处理实例化如下:

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

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

【讨论】:

    猜你喜欢
    • 2020-01-02
    • 2012-09-11
    • 2013-06-25
    • 1970-01-01
    • 2020-07-27
    • 2023-03-11
    • 2018-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多