質問

一部の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を呼び出すことができます。

子プロセスが出口で明示的なクリーンアップが発生すると予想される場合、テストケースでそれを行うよう手配する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top