gpt4 book ai didi

java - 如何对新对象进行Junit?

转载 作者:太空宇宙 更新时间:2023-11-04 12:17:35 27 4
gpt4 key购买 nike

想要了解当新对象传递到 Controller 时如何编写 JUnit 测试用例。

以下是来自 Spring MVC Controller 的代码片段,它传递新的 PriceIncrease 对象。

@RequestMapping(method=RequestMethod.GET, value="/priceincrease")
public String showPriceIncreasePage(Map<String, Object> map){
map.put("priceIncrease", new PriceIncrease());

logger.info("Returning Price Increase home page");
return priceIncreasePage;
}

我的单元测试是,这肯定是不正确的,因为它会失败。

@Test
public void testShowPriceIncreasePage(){
String viewName = inventoryController.showPriceIncreasePage(model);

/* Expecting to return the new object of PriceIncrease*/
assertEquals(new PriceIncrease(), model.get("priceIncrease"));

//assertEquals(InventoryController.priceIncreasePage, viewName);
}

我们是否应该使用when 来确保在Junit 测试中返回相同的对象。我不确定这是正确的方法。

@Test
public void testShowPriceIncreasePage(){
String viewName = inventoryController.showPriceIncreasePage(model);

/* Expecting to return the new object of PriceIncrease*/
PriceIncrease priceIncrease = new PriceIncrease();
when(model.get("priceIncrease")).thenReturn(priceIncrease);
assertEqual(priceIncrease, model.get("priceIncrease"));
}

提前致谢

最佳答案

编写好的测试是一个非常广泛的主题,如果您想编写真正好的和有用的测试,您应该真正深入研究这个主题。

举个例子:

  • 测试名称不应以“test”开头,除非您使用的是 JUnit 3.x。 JUnit 4.x提供了@Test注解来标记测试方法,
  • 测试的名称应该告诉读者您对被测单元的期望,
  • 测试应遵循给定/when/then结构。 given:在这个 block 中,您设置系统的状态,when:是您调用要测试的代码的地方,then:是您评估结果的地方(所有断言都应该放在这里)
  • 您想要断言从 Controller 方法返回的值等于“所需”值,并且您的模型包含特定对象,
  • 我没有看到任何 PriceIncrease 代码,但我认为它没有实现 equals/hashCode 方法?如果是这种情况,代码将无法工作。
  • equals/hashCode 添加到 PriceIncrease 将帮助您完成正在编写的测试

你的测试应该看起来不像这样:

@Test
public void shouldRedirectToPriceIncreasePageWithModelValuesSetCorrectly(){
// given
Map<String, Object> model = new HashMap<>();

// when
String viewName = inventoryController.showPriceIncreasePage(model);

// then
assertEqual(viewName, "some-view-name");
assertEqual(model.get("priceIncrease"), new PriceIncrease());
assertEqual(model.size(), 1);
}

如果您想提高考试写作技巧,请考虑 Tomasz Kaczanowski 的这些书:

关于java - 如何对新对象进行Junit?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39216283/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com