我可以使用UnitTest的SystemExit处理程序吗?

2024-06-17 09:47:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在将afl fuzz(一个C应用程序)重写为Python。因为我对它的内部工作原理没有足够的了解,所以我想尽可能地复制它的功能。在

我正在尝试运行一个例程的功能测试,该例程派生Python解释器,运行execve,如果失败,则通过返回42向调用方报告失败。该测试在unittest外部运行良好,但在放入它时失败:

#!/usr/bin/env python

import os
import sys
import unittest


def run_test():
    x = os.fork()
    if not x:
        sys.exit(42)
    waitpid_result, status = os.waitpid(x, os.WUNTRACED)
    print(os.WEXITSTATUS(status))


class ForkFunctionalTest(unittest.TestCase):

    def test_exercise_fork(self):
        run_test()


if __name__ == '__main__':
    print('Expecting "42" as output:')
    run_test()
    print('\nAnd here goes unexpected SystemExit error:')
    unittest.main()

以下是失败的原因:

^{pr2}$

有没有办法让unittest在不改变run_test的情况下使用这个函数?我试过操作系统退出而不是系统出口(),但它使程序在这两个进程中死亡。在


Tags: runtestimportifosmaindefstatus
2条回答

但事实证明,我需要在我的操作系统中模拟它os.fork操作系统. 愚蠢的错误。在

sys.exit()引发SystemExit类异常,如果未捕获到该异常,则退出程序。您可以尝试捕捉异常:

def text_exercise_fork(self):
    try:
        run_test()
    except SystemExit as e:
        print(e.args[0])

相关问题 更多 >