Junit:AssertEquals的字符串返回

时间:2015-11-16 12:42:32

标签: junit

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

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

有没有办法在不解析日志文件的情况下读取AssertionError?

感谢。

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

读取/写入文件并不是测试应该做的事情。测试的输入应该在测试中定义,而不是在可以改变的外部文件中定义 - 这可能会引入假阴性或甚至更糟糕的误报(使测试有效无用,同时也给出错误的信心,因为测试是绿色)。

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

如果是某些公司官僚机构,并且你需要拥有这个excel文件,那么不写经典的“测试”是有意义的。我建议只使用main方法完成工作 - 读取文件,运行代码,使用简单的if (output.equals(expected))检查输出,然后写回文件。

答案 2 :(得分:1)

使用try catch包装AssertEquals(expectedResult,actualResult) 在捕获

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

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

尝试谷歌类似软断言

答案 3 :(得分:1)

Documentation on assertEquals非常明确该方法的作用:

  

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

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

注意:

  

如果expectedactualnull,则视为相同。