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的主要内容,如果未能解决你的问题,请参考以下文章

JUnit的各种断言

Javascript函数的模板,带有作为对象传递的可选和必需参数

RAML 1.0:在可选对象中定义 minProperties

如何使用警卫同时解开 Swift 可选和强制类型转换?

SpringBoot JUnit4的断言

在 JUnit 中断言正则表达式匹配