我是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
-调用以避免异常处理?
暂无答案!
目前还没有任何答案,快来回答吧!