子プロセスを備えたPyunit
-
28-10-2019 - |
質問
一部のPythonコードでは、i fork
そして、親がそれが終了するのを待つ間、子どものプロセスで何らかの処理を行います。そうではありません exec
後に fork
.
Pyunitでこのコードのテストに問題があります。子供のプロセスが明示的に終了すると sys.exit
, 、Pyunitエラーを作成します。
以下のこのコードが問題を生成します
class TestClass(TestCase):
def test(self):
pid = os.fork()
if pid == 0:
sys.exit(0)
else:
os.waitpid(pid,0)
これはエラーです
Traceback (most recent call last):
File "test.py", line 15, in test
sys.exit(0)
SystemExit: 0
----------------------------------------------------------------------
Ran 1 test in 0.007s
FAILED (errors=1)
子どものプロセスが明示的に終了した場合、Pyunitがテストに失敗しないようにする方法はありますか?
解決
sys.exitが行うのは、通常どおりに泡立つSystemExit例外をスローすることです。ただし、OS._EXIT(0)はすぐに終了し、クリーンアップコードに実行する機会を与えません。これにより、Pyunitはテストに失敗したことを含め、何でもすることができなくなります。したがって、テストコードでは、SystemExitをトラップして、代わりにOS._EXITを呼び出すことができます。
子プロセスが出口で明示的なクリーンアップが発生すると予想される場合、テストケースでそれを行うよう手配する必要があります。
所属していません StackOverflow