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")));