【问题标题】:JUnit How to assertTrue/Equals on a Optional and a objectJUnit如何在可选和对象上断言True / Equals
【发布时间】: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;
    }

我的调试结果:

【问题讨论】:

    标签: java hibernate spring-boot spring-mvc junit


    【解决方案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,你必须自己编写。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-17
      • 1970-01-01
      • 2018-12-23
      • 2018-10-21
      • 2012-12-23
      • 1970-01-01
      相关资源
      最近更新 更多