Spring 测试:如何将 'pass' 模型转换为控制器 post 方法
Spring test: how to 'pass' model into controller post method
我在 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 方法时没有任何问题,所以我做到了这一点,但是上面的测试不起作用,因为我得到:
"The method pagerequestSubmit(Pagerequest, Model) in the type PagerequestController is not applicable for the arguments (Pagerequest)"
这是有道理的,因为我没有传入任何模型类型的参数
我完全不知道该怎么做。
我尝试实例化一个模型,但它不起作用,创建一个假模型,它也不起作用,并传入一个空的模型变量,它至少得到了测试运行,但是当模型在控制器中使用时抛出空指针异常。
关于如何解决这个问题有什么想法吗?
提前致谢!
您的 pagerequestSubmit(@ModelAttribute Pagerequest pagerequest, Model model)
接受两个参数,一个是 pagerequest,另一个是模型,但在您的测试中,您只传递了 pagerequest 。您需要传递模型对象,因为 well.This 只是您的错误方法签名测试 class 。
创建模型对象的模拟并将其作为
粘贴到您的代码中
@Mock
private Model model;
String outcome = pagerequestController.pagerequestSubmit(mockPageRequest,model);
assertThat(outcome, is(equalTo("result")));
我在 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 方法时没有任何问题,所以我做到了这一点,但是上面的测试不起作用,因为我得到:
"The method pagerequestSubmit(Pagerequest, Model) in the type PagerequestController is not applicable for the arguments (Pagerequest)"
这是有道理的,因为我没有传入任何模型类型的参数 我完全不知道该怎么做。
我尝试实例化一个模型,但它不起作用,创建一个假模型,它也不起作用,并传入一个空的模型变量,它至少得到了测试运行,但是当模型在控制器中使用时抛出空指针异常。
关于如何解决这个问题有什么想法吗?
提前致谢!
您的 pagerequestSubmit(@ModelAttribute Pagerequest pagerequest, Model model)
接受两个参数,一个是 pagerequest,另一个是模型,但在您的测试中,您只传递了 pagerequest 。您需要传递模型对象,因为 well.This 只是您的错误方法签名测试 class 。
创建模型对象的模拟并将其作为
@Mock
private Model model;
String outcome = pagerequestController.pagerequestSubmit(mockPageRequest,model);
assertThat(outcome, is(equalTo("result")));