【问题标题】:Junit: String return for AssertEqualsJunit:AssertEquals 的字符串返回
【发布时间】:2016-02-17 13:39:46
【问题描述】:

我在 Excel 工作表中定义了测试用例。我正在从这张表中读取一个字符串(我的预期结果)并将其与我从数据库中读取的结果(我的实际结果)进行比较。然后我使用 AssertEquals(expectedResult, actualResult) 将任何错误打印到日志文件(我正在使用 log4j),例如我得到 java.lang.AssertionError: Different output expected: 但结果是:。

我现在需要将该结果写入 Excel 表格(定义测试用例的表格)。如果只有 AssertEquals 返回字符串,带有 AssertionError 文本会很棒,因为我可以立即将其写入我的 Excel 工作表。因为它返回无效,虽然我被卡住了。

有没有一种方法可以在不解析日志文件的情况下读取 AssertionError?

谢谢。

【问题讨论】:

    标签: junit


    【解决方案1】:

    我认为您在这里错误地使用了 junit。这就是为什么

    • assertEquals 不是 AssertEquals ( ;) )
    • 您不需要登录。你应该让断言完成他们的工作。如果它都是绿色的,那么你很好,你不需要检查日志。如果你得到蓝色或红色(日食颜色:))那么你有问题要看。蓝色是失败,这意味着你的断言是错误的。例如,您得到 7,但预期为 10。红色表示错误。运行时抛出空指针或其他异常
    • 您应该需要从 Excel 文件或数据库中读取单元测试。如果您确实需要与其他系统协调,那么您应该尝试stub or mockthem。通过单元测试,您应该尝试在代码中测试方法
    • 如果您在 JUnit 上进行引导以尝试比较 excel 工作表和数据库,那么我也可以将表格导出到 excel 中,然后在 excel 中的列之间进行比较

    【讨论】:

    • 您好 RNJ,感谢您的回复。我正在做的是测试特定系统的许多组合(例如,特定测试可能有 10,000 种不同参数值的组合,即我的 Excel 工作表中的 10,000 行)。因此,我有一个包含循环的测试方法(用@Test 注释),经过一些处理后,我将预期值(从我的 Excel 测试用例中检索)和实际值(从我的数据库中检索)传递给 assertEquals。然后,我将每行的“通过”或“失败”的结果写回我的 Excel 工作表。这很好用并且很好地服务于它的目的。
    • 我现在想要的是简单地检索 assertEquals 的字符串结果并将其写入我的 Excel 工作表中,这样对于每个测试用例,除了 PASS 或 FAIL 之外,我还可以看到 assertEquals结果对我的用户来说会很棒...
    【解决方案2】:

    读取/写入文件并不是测试真正应该做的事情。测试的输入应该在测试中定义,而不是在可以更改的外部文件中定义 - 这可能会引入假阴性甚至更严重的假阳性(使您的测试有效地无用,同时也会错误地相信一切正常,因为测试是绿色)。

    鉴于您的评论(来自文件的 10k 个不同参数的循环),我建议将此 excel 文件转换为 JUnit Parameterized 测试。您可能希望将数组定义放在另一个类中,因为 10k 行相当多。

    如果是一些企业官僚作风,你需要有这个excel文件,那么不写经典的“测试”是有道理的。我只推荐一个 main 方法来完成这项工作 - 读取文件,运行代码,使用简单的 if (output.equals(expected)) 检查输出,然后写回文件。

    【讨论】:

      【解决方案3】:

      用 try catch 包装你的 AssertEquals(expectedResult, actualResult) 赶上

      catch(AssertionError e){
       //deal with e.getMessage or etc.
      }
      

      但我猜出于某些原因,这不是个好主意。

      并尝试谷歌软断言之类的东西

      【讨论】:

        【解决方案4】:

        Documentation on assertEquals 非常清楚该方法的作用:

        断言两个对象相等。如果不是,一个 AssertionError 没有消息被抛出。

        您需要用 try-catch 块包装断言,并在异常处理中执行您的日志记录。您需要使用来自特定测试用例的信息来制作自己的消息,但这正是您所要求的。


        注意:

        如果expectedactualnull,则认为它们相等。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-08-27
          • 2019-03-22
          • 2020-08-07
          • 2012-05-03
          • 1970-01-01
          相关资源
          最近更新 更多