我正在Spring Boot工作,我正在尝试为控制器编写一个集成测试,如下所示:
public String pagerequestSubmit(@ModelAttribute Pagerequest pagerequest, Model model) {
...
}
现在我尝试为此控制器编写集成测试,如下所示:
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
@ContextConfiguration(classes=PageAnalyzerInSpringApplication.class)
public class PagerequestControllerIntegrationTest {
@Autowired
PagerequestController pagerequestController;
@Test
public void testHappyPath() {
Pagerequest mockPageRequest = new Pagerequest();
mockPageRequest.setUrl("https://www.somedomain.com/");
....
String outcome = pagerequestController.pagerequestSubmit(mockPageRequest);
assertThat(outcome, is(equalTo("result")));
}
我在做模拟网页请求时没有任何问题。并将其传递给post方法,所以我做到了这一点,但上面的测试不起作用,因为我得到了:
" PagerequestController类型中的方法pagerequestSubmit(Pagerequest,Model)不适用于参数(Pagerequest)"
这是有道理的,因为我没有传递Model类型的任何参数 而且我完全坚持如何做到这一点。
我试图实例化一个不起作用的模型,创建一个假模型,它也没有工作,并传入一个null变量的Model变量,至少得到测试运行,但在控制器中使用模型时抛出空指针异常。
有关如何解决此问题的任何想法?
提前致谢!
答案 0 :(得分:0)
你的pagerequestSubmit(@ModelAttribute Pagerequest pagerequest, Model model)
接受两个参数,一个是pagerequest而另一个是模型,但是在你的测试中你只传递了pagerequest。你也需要传递模型对象。这只是测试类中的错误方法签名。
创建模型对象的模拟并将其粘贴到代码中
@Mock
private Model model;
String outcome = pagerequestController.pagerequestSubmit(mockPageRequest,model);
assertThat(outcome, is(equalTo("result")));