16

アプリケーションのファイルを/Filesフォルダーの下に置き、テストユニットを/ UnitTestsに置きたいので、アプリとテストを明確に分離しました。

mainApp.pyと同じモジュールルートを使用できるようにするために、ルートフォルダーにtestController.pyを作成しました。

mainApp.py
testController.py
Files
  |__init__.py
  |Controllers
     | blabla.py
  | ...
UnitTests
  |__init__.py
  |test_something.py

したがって、test_something.pyで、/ Files / Controllers / blabla.pyにある1つの関数をテストしたい場合は、次のことを試してください。

import unittest
import Files.Controllers.blabla as blabla


class TestMyUnit(unittest.TestCase):

    def test_stupid(self):
        self.assertTrue(blabla.some_function())


if __name__ == '__main__':
    unittest.main()


次に、ファイルtestController.pyから、次のコードを実行します。

import TestUnits.test_something as my_test
my_test.unittest.main()

失敗は出力されませんが、テストは実行されません

----------------------------------------------------------------------
Ran 0 tests in 0.000s

OK
[Finished in 0.3s]


依存関係のないテストを試しましたが、「main」として実行すると機能しますが、外部から呼び出された場合は同じように出力されます。

import unittest


def tested_unit():
    return True


class TestMyUnit(unittest.TestCase):

    def test_stupid(self):
        self.assertTrue(tested_unit())


if __name__ == '__main__':
    unittest.main()

質問:これを機能させるにはどうすればよいですか?

4

3 に答える 3

25

メソッドunittest.main()は、コンテキストに存在するすべてのunittest.TestCaseクラスを調べます。したがって、testController.pyファイルにテストクラスをインポートし、このファイルのコンテキストでunittest.main()を呼び出す必要があります。

したがって、ファイルtestController.pyは次のようになります。

import unittest    
from UnitTests.test_something import *
unittest.main()
于 2013-03-11T09:54:24.877 に答える
9

test_something.pyで、次のようにします。

def suite():
    suite = unittest.TestSuite()
    suite.addTest(unittest.makeSuite(TestMyUnit, 'test'))
    return suite

testController.pyで、次のようにします。

from TestUnits import test_something

def suite():
    suite = unittest.TestSuite()
    suite.addTest(test_something.suite())
    return suite

if __name__ == '__main__':
    unittest.main(defaultTest='suite')
于 2013-03-11T09:53:27.443 に答える
-1

次のように、subprocess.call()を使用してテストを実行する回避策があります。

import subprocess

args = ["python", "test_something.py"]
subprocess.call(args)
于 2016-07-20T11:34:24.763 に答える