当前位置: 首页 > 知识库问答 >
问题:

如何为Postmapping方法编写junit测试

公孙弘深
2023-03-14

我有一个程序,显示与名称和用户需要输入他们的字段。我怎么测试这个?

public class User {
    @NotEmpty
    private String firstName;

    @NotEmpty
    private String lastName;

public String getAllInfo() {
        return this.firstName + '\n' + this.lastName;
    }

//getters and setters

}
public class Store {

...

@PostMapping("/cart/index")
    public String getInfo(@Valid final User user, final Model model) {
        Store.LOGGER.info("{}", user.getAllInfo());
        return "cart/index";
    }

@GetMapping(value = "cart/index")
    public String index(final Model model) {
        model.addAttribute("user", new User());
        return "cart/index";
    }

...
}
null
null
MockHttpServletRequest:
      HTTP Method = POST
      Request URI = /cart/index
       Parameters = {}
          Headers = {Accept=[application/json]}

Handler:
             Type = app.vlad.store.Store
           Method = public java.lang.String app.vlad.store.Store.getInfo(app.vlad.user.User,org.springframework.ui.Model)

Async:
    Async started = false
     Async result = null

Resolved Exception:
             Type = null

ModelAndView:
        View name = cart/index
             View = null
        Attribute = user
            value = app.vlad.user.User@248deced
           errors = []

FlashMap:
       Attributes = null

MockHttpServletResponse:
           Status = 200
    Error message = null
          Headers = {}
     Content type = null
             Body = 
    Forwarded URL = cart/index
   Redirected URL = null
          Cookies = []

AssertionError:JSON路径“$.FirstName”处没有值,异常:JSON不能为null或空

我的测试:

storetest.java

public class StoreTest {

    @Autowired
    MockMvc        mockMvc;

    @Mock
    private User   user;
    @Mock
    private Model  model;
    @Mock
    Store          store;

    @Autowired
    List<Products> products;

    @Before
    public void setup() {

        MockitoAnnotations.initMocks(this);
        final Store store = new Store(this.products);

        this.mockMvc = MockMvcBuilders.standaloneSetup(store).build();

    }
@Test
    public void testGetInfo() throws Exception {
        this.user.setFirstName("Ivan");
        this.user.setLastName("Ivanov");

        this.mockMvc
                .perform(MockMvcRequestBuilders.post("/cart/index")
                        .accept(MediaType.APPLICATION_JSON))
                .andDo(MockMvcResultHandlers.print())
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andExpect(MockMvcResultMatchers.jsonPath("$.firstName").value("Ivan"))
                .andExpect(MockMvcResultMatchers.jsonPath("$.lastName").value("Ivanov"));

    }
}

共有1个答案

逑俊楚
2023-03-14

最好的方法是使用SpringBootTest。这将启动一个Spring Boot应用程序,然后您可以使用类似RestAssured的东西来调用API。

这个网站详细介绍了所有的设置:http://www.masterspringboot.com/getting-startned/testing-spring-boot/testing-spring-boot-with-resst-consured

 类似资料:
  • 我尊敬的java开发者朋友们。我正在尝试测试并覆盖克隆方法的捕获块。我已经浪费了一个星期,但没有找到任何解决方法来弥补这个障碍。请帮帮我。 我的源代码- 我的Junit测试用例- 我已经为图片提供了链接,这将使我对这个问题和我所做的尝试有更多的了解。 源代码- 我尝试过的junit-

  • 我必须为一个调用API然后处理响应的类编写测试。类有两个公共函数和一个私有函数。第一个公共方法获取ID列表。在循环中为每个ID调用第二个公共方法,以获取与ID关联的详细信息。私有方法是在第二个公共方法内部调用的,因为获取基于id的详细信息的调用是异步进行的。 我是JUnits的新手,虽然我知道我不应该测试API调用,只是测试我的函数,但我仍然不明白单元测试应该断言什么。

  • 在我的项目(spring boot应用程序)中,我有大约200个测试用例。最近,我们为缓存管理器(ehcache)实现了一个工厂bean,它位于我的启动类(@SpringBootApplication)中。 我的问题是,一旦带有工厂bean的启动类被一个测试用例执行,所有后续的测试用例都会失败,并出现错误。。。 “同一个VM中已存在另一个同名“appCacheManager”的CacheManag

  • 请注意,我没有访问实际的代码在一个地方,我可以张贴它。 此外,我也限于(由于不幸的原因)使用Spring 3.0.5或3.1.2。

  • 问题内容: 我可以为以下代码编写的最 详尽的 测试是什么? 此方法在类内。该方法调用JpaRepository,然后在实体上调用其方法。 如果无法测试是否要删除实体,是否可以在该方法上运行 其他 任何功能? 问题答案: 有两种测试策略。一种是单元测试,即确保您的服务正常运行。另一个是集成/端到端测试,即确保所有功能都能很好地协同工作。 您对自己拥有的东西进行单元测试,对所有内容进行集成测试。这是一

  • 我正在尝试为这样的情况编写测试用例,在这个情况下,我期待的是datatruncation异常,我试图使用assert equals和比较消息来断言相同的情况,但是看起来像是比较两个字符串,有没有更好的方法来为这样的异常编写测试用例。 我正在使用JUnit5