簡體   English   中英

無法在python中實例化unittest.Testcase的子類

[英]can't instantiate child classes of unittest.Testcase in python

我正在迭代一個文本文件。

文件文本文件中的每一行都是測試的名稱。

我試圖實例化測試類,但我不斷收到此錯誤:

ValueError: no such test method in <class 'login_to_blog'>: runTest

我正在做的代碼在這里:

    test_name = line.replace("\n", "") #name of test file, class, and method _must_ be shared.
    module = __import__(test_name)
    test_class = getattr(module, test_name)
    suite.addTest(test_class())

這是login_to_blog:

from selenium import selenium
import unittest, time, re

class login_to_blog(unittest.TestCase):
    def setUp(self):
        self.verificationErrors = []
        self.selenium = selenium("localhost", 4444, "*chrome", "http://blog/")
        self.selenium.start()

    def test_login_to_blog(self):
        sel = self.selenium
        sel.open("/")
        sel.type("signin_username", "jim")
        sel.type("signin_password", "jones")
        sel.click("//input[@value='Signin']")
        sel.wait_for_page_to_load("30000")
        try: self.failUnless(sel.is_text_present("your blog posts"))
        except AssertionError, e: self.verificationErrors.append(str(e))

    def tearDown(self):
        self.selenium.stop()
        self.assertEqual([], self.verificationErrors)

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

重要的是要注意這些測試由他們自己通過命令行成功運行。

任何想法我如何實例化它們並從python代碼中手動運行它們?

查看PyUnit Suite文檔 ,它說:

創建實例時,我們必須指定要運行的測試方法。 我們通過在構造函數中傳遞方法名稱來完成此操作:

    defaultSizeTestCase = WidgetTestCase("testDefaultSize")
    resizeTestCase = WidgetTestCase("testResize")

再往下,我覺得你要找的東西是:

由於創建具有許多類似命名的測試函數的TestCase子類是一種常見模式,因此在unittest模塊中提供了一個名為makeSuite的便捷函數,它構造了一個包含測試用例類中所有測試用例的測試套件: -

   suite = unittest.makeSuite(WidgetTestCase,'test')

所以你要:

suite = unittest.makeSuite(test_class, 'test')
result = unittest.TestResult()
suite.run(result)

或類似的東西。

許多人希望他們可以創建一個測試套件,他們可以添加一個基於unittest.TestCase的完整類,它將自動運行所有“test *” - 函數。 那是因為unittest.main()會這樣做。 但實際上,每個TestCase類只調用一個方法 - 查看lib / python / unittest / case.py中unittest.TestCase的源代碼。

class TestCase:
    def __init__(self, methodName='runTest'):

而這就是錯誤來自於基類TestCase不提供“def runTest”的默認實現。 如果你想模仿unitest.main的行為,那么你需要創建一個你希望執行的測試類FOR EACH方法的一個實例

test_name = line.replace("\n", "") #name of test file, class, and method _must_ be shared.
module = __import__(test_name)
test_class = getattr(module, test_name)
for method in dir(test_class):
    if method.startswith("test"):
        suite.addTest(test_class(method))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM