我正在 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")));
}
我在执行 'mock pagerequest' 并将其传递到 post 方法时没有任何问题,所以我做到了,但上述测试不起作用,因为我得到:
“PagerequestController 类型中的 pagerequestSubmit(Pagerequest, Model) 方法不适用于参数 (Pagerequest)”
这是有道理的,因为我没有传入任何 Model 类型的参数,而且我完全被困在如何做到这一点上。
我试图实例化一个模型,它不起作用,创建一个假模型,它也不起作用,并传入一个空的模型变量,这至少让测试运行,但随后抛出空控制器中使用模型时的指针异常。
关于如何解决这个问题的任何想法?
提前致谢!
您pagerequestSubmit(@ModelAttribute Pagerequest pagerequest, Model model)
接受两个参数,一个是 pagerequest,另一个是模型,但在您的测试中,您只传递 pagerequest 。您还需要传递模型对象。这只是您的测试类中的错误方法签名。创建模型对象的模拟并将其粘贴到您的代码中
@Mock
private Model model;
String outcome = pagerequestController.pagerequestSubmit(mockPageRequest,model);
assertThat(outcome, is(equalTo("result")));
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句