我正在使用 pytest 编写测试。我遇到的情况是,SystemExit如果输入错误,某些函数会在终端上抛出一些错误消息。
我想为抛出的情况编写测试SystemExit,并验证输出错误消息中是否有特定的字符串。
这是代码:
def test_validate_input():
...
with pytest.raises(SystemExit) as error:
_validate_function(test_wrong_input)
assert error.value.code == 1
Run Code Online (Sandbox Code Playgroud)
error如果我运行验证某些输入的实际函数,我无法获得输出错误消息,因为我在命令行上得到的消息。请让我知道我在这里缺少什么。
编辑:
我正在调用 asubprocess.call_output来运行引发错误的命令。我必须在调用stderr=subprocess.STDOUT中添加call_output作为参数才能获取错误消息。然后我在测试中使用了@p3j4p5的答案。
我们正在使用Java开发Web应用程序。我想使用System.exit()我的一种方法而不是返回。据我所知,如果我使用该应用程序,它将进入关闭模式。
有人可以给我建议吗?
我认为有一种方法可以做到这一点SecurityManager,但我不想为此在应用程序中引入它。
有没有办法使用其他解决方案捕获并记录所谓的 exit() 的堆栈跟踪?
例如:
import argparse
parser = arparse.ArgumentParser()
# parser.add_argument(...) ...
args = parser.parse_args(args_list)
Run Code Online (Sandbox Code Playgroud)
问题是,parser.parse_args如果出现错误,将自动退出args_list.是否有一个设置让它引发更友好的异常?SystemExit如果有任何方法,我不想要从中捕获并从中提取所需的错误消息.
我正在编写一个程序,我想循环遍历几个配置文件,并在每个文件中调用一个以该文件名作为参数的类,并等待它完成.目前我在做:
for (int i = 1; i <= 3; i++){
String[] a = new String[1];
a[0] = "data/config" + i + ".xml";
edu.cwru.sepia.Main2.class.getMethod("main", String[].class).invoke(null, (Object)a);
}
Run Code Online (Sandbox Code Playgroud)
然而,发生的情况是该类只被调用一次,然后整个程序停止.我认为类中有一个退出行,但由于它是一个JAR文件,我无法确定,我无法编辑它.
我们假设是这样的; 我该如何解决这个问题呢?也就是说,在调用以exiting结束之后,我的外部循环方法继续,并再次使用下一个参数调用该类.