Java 弹簧测试:如何';通过';模型转换为控制器post方法
我在Spring Boot中工作,试图为控制器编写一个集成测试,如下所示:Java 弹簧测试:如何';通过';模型转换为控制器post方法,java,spring,spring-mvc,testing,integration-testing,Java,Spring,Spring Mvc,Testing,Integration Testing,我在Spring Boot中工作,试图为控制器编写一个集成测试,如下所示: public String pagerequestSubmit(@ModelAttribute Pagerequest pagerequest, Model model) { ... } 现在我正试图为这个控制器编写一个集成测试,如下所示: @RunWith(SpringRunner.class) @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
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)
这很有意义,因为我没有传入任何类型模型的参数
我完全被困在如何做到这一点上
我试着实例化一个不起作用的模型,创建一个假模型,这个模型也不起作用,然后传入一个null的模型变量,该变量至少可以让测试运行,但在控制器中使用该模型时抛出null指针异常
有没有办法解决这个问题
提前谢谢 您的
pagerequestSubmit(@ModelAttribute Pagerequest Pagerequest,Model Model)
接受两个参数,一个是Pagerequest,另一个是Model,但在您的测试中,您只传递Pagerequest。您还需要传递Model对象。这只是测试类中错误的方法签名。
创建模型对象的模拟,并将其粘贴到代码中作为
@Mock
private Model model;
String outcome = pagerequestController.pagerequestSubmit(mockPageRequest,model);
assertThat(outcome, is(equalTo("result")));
也可以使用弹簧mv c测试,参考: