JUnit如何在可选和对象上断言True / Equals
Posted
技术标签:
【中文标题】JUnit如何在可选和对象上断言True / Equals【英文标题】:JUnit How to assertTrue/Equals on a Optional and a object 【发布时间】:2019-11-02 16:28:30 【问题描述】:如何使用 assert.equals 在 Optional 和 Object 之间进行测试?调试后它显示相同的值,但我的测试仍然未能通过。返回错误:在 org.springframework.test.util.AssertionErrors.assertTrue
我的测试类如下所示:
@RunWith(SpringJUnit4ClassRunner.class)
@ActiveProfiles("test")
@SpringBootTest
public class DishServiceTest
private static final String DISH_NAME = "Kaas";
private static final String DISH_TYPE = "Voorgerecht";
@Autowired
private DishService dishService;
@Test
public void findById()
//execute
Dish dish = createDish(DISH_NAME, DISH_TYPE);
Long dishId = dish.getId();
Optional<Dish> dish2 = dishService.findById(dishId);
//verify
assertNotNull(dish2);
//assertEquals(Optional.of(dish2), dish);
assertTrue("created a dish" ,Optional.of(dish2).equals(dish));
private Dish createDish(String dishName, String dishType)
Dish dish = new Dish();
dish.setDishName(dishName);
dish.setDishType(dishType);
Dish retval = dishService.save(dish);
return retval;
我的调试结果:
【问题讨论】:
【参考方案1】:DishService.findById
返回一个Optional
,它永远不会是null
契约;因此,测试中的assertNotNull
是空操作。首先用assertTrue(dish2.isPresent())
断言非空。
然后将返回的Optional
对象的内容与:
assertEquals(dish, dish2.get())
【讨论】:
谢谢 disc2.get() 是我要找的东西!得到它的工作:assertEquals(“创建了一道菜”,dish2.get(),菜);【参考方案2】:你在 Dish 类中重写了 equals() 吗?如果不是,则使用 Object.equals(),并且仅当将对象与自身进行比较时才返回 true。如果你想要一个 equals() 函数,如果两个不同的 Dish 对象的字段都相等则返回 true,你必须自己编写。
【讨论】:
以上是关于JUnit如何在可选和对象上断言True / Equals的主要内容,如果未能解决你的问题,请参考以下文章
Javascript函数的模板,带有作为对象传递的可选和必需参数