servletcontext

r6l8ljro  于 2021-07-14  发布在  Java
关注(0)|答案(0)|浏览(147)

我是Spring的新手之一。所以我的问题是,我有这样一个restcontroller,它使用第三个lib,它使用静态方法:

@RestController
@RequestMapping("/my/rest/controller")
public class MyRestController
{
    @PostConstruct
    public void initThirdLib()
    {
        ThirdLibClassA.doSomeInitStuff();
    }

    // methods with @RequestMapping
}

这很好,因为我运行了mvc应用程序本身。但当我运行测试时,它会从我的 initThirdLib() -方法,其中第三个库需要一个有效的对象 javax.servlet.ServletContext . 我找到了通过调用一个方法将其提供给lib的方法 ThirdLibClassB.setContext( servletContext ) .
但当我这么做的时候,我发现 @PostConstruct -方法在调用测试模拟设置之前调用。
我的测试结果如下:

@ExtendWith(SpringExtension.class)
@SpringBootTest(webEnvironment = WebEnvironment.MOCK)
class MyTest 
{
    @Autowired
    private WebApplicationContext wac;

    private MockMvc mockMvc;

    @BeforeEach
    void setup()
    {
        this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
        ServletContext servletContext = this.wac.getServletContext();
        ThirdLibClassB.setContext( servletContext );
        wac.getBean( MyRestController.class ).initThirdLib();
    }
}

如果我从 initThirdLib() 它仍将在 @PostConstruct 并将在手动调用测试中成功。
但是有没有办法提供 servletContext@PostConstruct -调用以避免异常处理?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题