特定のディレクトリからすべてのテストケースを検出する単純なフレームワークを作成しようとしています (これらのケースには unittest を使用しています)、これらの各テストケースを複数の python ファイルに対して実行します。関数シグネチャ。
Autograder.py
TestCasesFolder/
TestCase1.py
TestCase2.py
...
ImplementationFolder/
Implementation1.py
SecondImplementationFolder/
Implementation2.py
フレームワークは、(これはクラス内にあることに注意してください) を使用して、すべてのテスト ケースを正常に検出します。
self.suites = unittest.defaultTestLoader.discover(self.testDirectory)
そこから、Implementation1 と Implementation2 の両方でこれらのスイートを実行したいと思います。
ビルトインを使っています
self.suites.run(unittest.TestResult)
unittest のメソッドを使用してテストを実行し、この問題を解決するための最初の試みは、テストしたい現在の実装をインポートすることでした
imp.load_source
次に、TestCase1.py のグローバル名前空間を正しいモジュール参照で更新します。ただし、各モジュールには独自のグローバル名前空間があるため、他のファイルの名前空間にフックできるかどうかはわかりません。これが正しいアプローチなのか、それとも私の実装よりも良い方法があるのか もわかりません。これを行うにはどうすればよいですか?
編集
私の現在の解決策は、 Autograder.py ファイルが__builtins__
実装モジュールへの参照でモジュールを更新することです。実際の行は次のようになります。
__builtins__.ImplementationModule = imp.load_source("Implementation Module", "Implementation1.py")
これは、TestCase1.py が を介して ImplementationModule にアクセスできる場合を意味します__builtins__
。もちろん問題は、これは__builtins__
モジュールが ImplementationModule という名前を持つものを決して実装しないことを前提としていることです。そうしないと、未知の意味で上書きされます。これを行うリスクの低いバージョンはありますか?