1

テストスイートがあり、作成したテストで動作させようとしています。それらを個別に実行するとテストは機能しますが、すべてをテストスイートで実行したいと考えています。以下のコードは、作成されたテスト スイートを示しています。

import unittest

def suite():
    modules_to_test = ('TestAbsoluteMove', 'TestContinuousMove') # and so on
    alltests = unittest.TestSuite()
    for module in map(__import__, modules_to_test):
        alltests.addTest(unittest.findTestCases(module))
    return alltests

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

スイートとリンクするために、このコードをテスト コードに配置しました。

class AbsoluteMoveTestSuite(unittest.TestSuite):

def makeAbsoluteMoveTestSuite():
    suite = unittest.TestSuite()
    suite.addTest(TestAbsoluteMove("BasicAbsolutePan"))
    suite.addTest(TestAbsoluteMove("VerifyAbsolutePan"))
    suite.addTest(TestAbsoluteMove("VerifyAbsoluteTilt"))
    suite.addTest(TestAbsoluteMove("VerifyAbsolutePanSpeed"))
    suite.addTest(TestAbsoluteMove("VerifyAbsoluteTiltSpeed"))
    return suite

def suite():
    return unittest.makeSuite(TestAbsoluteMove)

生成されるエラーは、'TestAbsoluteMove' および TestContinuousMove' という名前のモジュールがないことを主張しています。このコードを機能させる方法を知っている人はいますか?

ありがとう

4

4 に答える 4

2

はこの種のものを簡単にします。テストを自動検出し、スイートとして実行します。(フラグを渡すことで特定のテストを実行することもできます。)

于 2010-01-21T16:29:28.627 に答える
2

TestAbsoluteMoveはクラスであり、どこかから取得する必要があります。AbsoluteMoveTestSuiteクラスが定義されている場合は常に、TestAbsoluteMoveをインポートする必要があります。

于 2010-01-21T16:31:25.667 に答える
2

これが私のテストスイートの作成方法です (loadTestFromTestCase はテストを自動的に検出します)

def suite():
    """ returns all the testcases in this module """
    return TestLoader().loadTestsFromTestCase(AbsoluteMoveTestSuite)

それらをすべて一度に実行するために、すべてのサブスイートを組み込んだスイートがあります(すべてのインポートに注意してください。新しいモジュールで使用できるようにする前に、それらをインポートする必要があります)

import sys
import unittest

import test.framework.asyncprocess as a
import test.framework.easyconfig as e
import test.framework.modulegenerator as mg
import test.framework.modules as m
import test.framework.filetools as f
import test.framework.repository as r
import test.framework.robot as robot
import test.framework.easyblock as b
import test.framework.variables as v
import test.framework.github as g
import test.framework.toolchainvariables as tcv
import test.framework.toolchain as tc
import test.framework.options as o
import test.framework.config as c


# call suite() for each module and then run them all
SUITE = unittest.TestSuite([x.suite() for x in [r, e, mg, m, f, a, robot, b, v, g, tcv, tc, o, c]])

# uses XMLTestRunner if possible, so we can output an XML file that can be supplied to Jenkins
xml_msg = ""
try:
    import xmlrunner  # requires unittest-xml-reporting package
    xml_dir = 'test-reports'
    res = xmlrunner.XMLTestRunner(output=xml_dir, verbosity=1).run(SUITE)
    xml_msg = ", XML output of tests available in %s directory" % xml_dir
except ImportError, err:
    sys.stderr.write("WARNING: xmlrunner module not available, falling back to using unittest...\n\n")
    res = unittest.TextTestRunner().run(SUITE)
于 2013-08-01T12:51:02.097 に答える
0

unittestこのように使用するのは少し面倒です。アリソンのアドバイスに従うnoseか、私の個人的なお気に入りのPythonテストツールpy.testを使用することを強くお勧めします。特定の命名規則に従って関数を作成し、それをリッピングさせてください!xUnit全体は、Pythonの領域に実際には適合しません。

于 2010-01-21T16:37:06.830 に答える