java如何通过系统上的单元测试。犯错误
在我需要对其进行单元测试的类中,有一部分使用系统。犯错误打印当测试到达该行时,我们如何抛出异常或通过任何@rule来通过测试? 要编写代码,请执行以下操作:
if (a == null) {
System.err.println("Error: empty file");
System.exit(1);
}
谢谢
你可以在下面搜索框中键入要查询的问题!
在我需要对其进行单元测试的类中,有一部分使用系统。犯错误打印当测试到达该行时,我们如何抛出异常或通过任何@rule来通过测试? 要编写代码,请执行以下操作:
if (a == null) {
System.err.println("Error: empty file");
System.exit(1);
}
谢谢
# 1 楼答案
你可能想把这句话和接下来的内容放在另一个类中,并模仿它。当你到达目的地时,你会遇到问题
因为这将迫使JVM退出,而您的测试将无法通过
请查看this现有问题以寻求帮助
# 2 楼答案
使用sytemExit(int代码)方法创建一个类。调用该方法,而不是直接调用系统。退出(…),通过这种方式,您可以通过模拟SystemExitter(使用PowerMock、EasyMock、Mockito等)来测试代码
尽管您永远无法测试sytemExit方法(…)对于SystemExitter,它将只包含一行代码
# 3 楼答案
您可以将
err
重定向到引发异常的流:当一些代码调用
System.err.println()
时,您将得到一个IOException
(您可以更改异常)因此,在测试中,您可以检查是否抛出了
IOException
# 4 楼答案
您可以使用
System#setErr
临时替换测试方法主体的System.err
。它可以是一个mock,以便您可以施加任何您喜欢的行为,也可以是一个流,您可以在其中累积类输出,以供后面的验证确保在测试方法结束之前将原始流放回原处,以免影响其他测试或测试框架本身