我在Excel工作表中定义了测试用例。我正在从这张表中读取一个字符串(我的预期结果)并将其与我从数据库中读取的结果(我的实际结果)进行比较。然后我使用AssertEquals(expectedResult,actualResult)将任何错误打印到日志文件(我使用log4j),例如我得到java.lang.AssertionError:期望的输出不同:< 10>但是:< 7>结果。
我现在需要将该结果写入Excel工作表(定义测试用例的工作表)。如果只有AssertEquals返回String,那么AssertionError文本就会很棒,因为我可以立即将它写入我的Excel工作表。因为虽然我卡住了,但它仍然无效。
有没有办法在不解析日志文件的情况下读取AssertionError?
感谢。
答案 0 :(得分:2)
我认为你在这里错误地使用了junit。这就是为什么
答案 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块包装断言,并在异常处理中执行您的日志记录。您需要使用特定测试用例中的信息制作自己的消息,但这就是您要求的内容。
注意:
如果
expected
和actual
为null
,则视为相同。