2013-07-25 51 views
0

我似乎無法得到test1.test_something()在test2工作..不知道是否因爲他們都從同一基地繼承?unittest,從其他文件運行測試

Helper.py:

class baseTest(unittest.TestCase): 
    def setUp(self, param="Something"): 
     print param 
     pass 

Test1.py

from Helper import baseTest 

class test1(baseTest): 

    def setUp(self): 
     super(test1, self).setUp('foo')   

    def test_something(self): 
     assert 1 == 1, "One does not equal one." 

Test2.py

from Helper import baseTest 
import Test1 

class test2(baseTest): 

    def setUp(self): 
     super(test2, self).setUp('bar') 

    def test_something(self): 
     Test1.test_somehing() 

現在,我有這個以前的工作,當我對測試1中的setUp和test2在他們的類,但一旦我讓他們都從baseTest繼承,我開始得到unbound method <method> must be called with Test instance as first argument (got nothing instead)。有什麼建議麼?

+1

你不能只是調用'Test1.test_something()'因爲'test_something'是一個實例方法,而不是一個類方法。你最好的選擇是使用'test2(Test1.test1)',這樣你就可以直接繼承這個測試方法,如果你沒有這個用例,不需要重新創建它。 – woozyking

回答

0

問題是Test1.test_something()是一個實例方法,而不是一個類方法。所以你不能這樣稱呼它(除此之外,即使它是類方法,也應該是Test1.test1.test_something)。

一種方式做到這一點(不與unittest.TestCase機制亂搞):

Test2.py

import Test1 

class test2(Test1.test1): 
    # whatever else 

大功告成,test2自動繼承Test1.test1.test_something()。如果您需要您的test2test_something做額外的東西,只需super(test2, self).test_something()test2類的重寫定義。

0

此舉被兩個Test1Test2類共享的測試分爲BaseTest

test.py:

import unittest 
import sys 

class BaseTest(unittest.TestCase): 
    def setUp(self, param="Something"): 
     print param 
     pass 
    def test_something(self): 
     assert 1 == 1, "One does not equal one."  

class Test1(BaseTest): 
    def setUp(self): 
     super(Test1, self).setUp('foo')   

test2.py:

import test 
import unittest 
import sys 

class Test2(test.BaseTest): 
    def setUp(self): 
     super(Test2, self).setUp('bar') 
相關問題