问题解决41:单元测试 verify 使用的时候,验证一个函数执行了多少次,验证出现参数不一致情况
发布日期:2021-05-19 23:11:34 浏览次数:11 分类:精选文章

本文共 1073 字,大约阅读时间需要 3 分钟。

解决verify测试失败的问题,尤其是在使用了重写hashCodeequals方法后,现在按照以下步骤操作:

  • 重写与修复hashCodeequals方法:确保在改动对象比较逻辑后,equalshashCode能够正确地反映对象内容的相等性和唯一性。具体修改如下:

    @Overridepublic boolean equals(Object obj) {    if (this == obj) return true;    if (!(obj instanceof PurchaseInputOrderDTO)) return false;    PurchaseInputOrderDTO other = (PurchaseInputOrderDTO) obj;    return this.purchaseNumber != null ? this.purchaseNumber.equals(other.purchaseNumber) :             thisambioUUID != null ? thisambioUUID.equals(other aylıkDni) : false;}@Overridepublic int hashCode() {    final int prime = 31;    int hashCode = 1;    hashCode = prime * hashCode + (purchaseNumber == null ? 0 : prime * purchaseNumber.hashCode());    hashCode = prime * hashCode + (amigoUUID == null ? 0 : prime * amigoUUID.hashCode());    return hashCode;}
  • 修改测试验证代码:将原本使用具体对象验证的语句,替换为使用参数不敏感的验证方法:

    verify(wmsService, times(1)).createPurchaseInputOrder(any(PurchaseInputOrderDTO.class));

    这样不论实际传递的PurchaseInputOrderDTO对象是什么,验证都会通过,只关注方法被调用次数是否正确。

  • 通过这样处理,测试不再依赖于具体的对象实例参数,而确认了WmsServicecreatePurchaseInputOrder方法恰好被调了一次,从而解决了比较失败的问题。

    上一篇:问题42:解决单元测试的时候使用@Sql注解去初始化数据库的时候,找不到sql脚本
    下一篇:mysql将磁盘数据读入到buffer pool 缓存池流程图

    发表评论

    最新留言

    留言是一种美德,欢迎回访!
    [***.207.175.100]2025年05月09日 17时05分56秒