2017-12-22 20 views
0

私が持っているもの:私は、抽象テストクラスとして使用していますTestBase.pyを持ってのpythonは抽象testBaseクラスのテストを防ぐunittestの自身

from abc import abstractmethod 

class TestBase: 

    expectData = None 

    def test_check_expectData(self): 
     if self.expectData is None: 
      raise NotImplementedError('you must have expectData') 

    @abstractmethod 
    def test_command_OK(self): 
     raise NotImplementedError('subclasses must override test_command()!') 

私は他人に継承させたいTestBase。例TestDemo.pyため

import unittest 
from TestBase import TestBase 

class TestDemo(unittest.TestCase, TestBase): 

    expectData = ["someData"] 

    def test_command_OK(self): 
     self.assertTrue(True) 

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

私は予想通りpython TestDemo.pyすべての作品実行する場合。私はexpectedDateを持っていない場合、私はNotImplementedErrorを取得し、私はtest_command_OKメソッドを持っていない場合、私はNotImplementedError: subclasses must override test_command()!

問題を得る:

私はsetup.py python setup.py testからテストスイートを実行します物事が壊れます。私はsetup.pyがTestBaseクラスを単独で実行していると考えて、TestBaseクラスexpectedDataにあると考えているので、テストに失敗します。

====================================================================== ERROR: myProject.tests.TestDemo.TestBase.test_check_expectData 
---------------------------------------------------------------------- Traceback (most recent call last): File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/nose/case.py", line 197, in runTest 
    self.test(*self.arg) File "/Users/z002x6m/Desktop/myProject/tests/TestBase.py", line 49, in test_check_expectData 
    if self.expectData is None: AttributeError: TestBase instance has no attribute 'expectData' 
====================================================================== ERROR: myProject.tests.TestDemo.TestBase.test_command_OK 
---------------------------------------------------------------------- Traceback (most recent call last): File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/nose/case.py", line 197, in runTest 
    self.test(*self.arg) File "/Users/z002x6m/Desktop/myProject/tests/TestBase.py", line 57, in test_command_OK 
    raise NotImplementedError('subclasses must override test_command()!') NotImplementedError: subclasses must override test_command()! 

私はすべてが正常に動作したときである私が直接TestDemoを実行したとき、私は<class '__main__.TestDemo'>を取得し、私のtest_check_expectData(self)方法でprint(self.__class__)をプリントアウトした場合。 python setup.py testを実行するとmyProject.tests.TestDemo.TestBaseが得られます。

setup.pyTestBaseクラスを実行しないように指示する方法はありますか?多分@unittest.skipis , @unittest.skipif, @unittest.skipunless?私はサブクラスがこれらすべてのサブクラスにexpectDataを持たせたいというテストが必要なので、これらのテストをスキップする必要はありません。 TestBaseはテンプレートとしての使用を意図されており、force/checkサブテストクラスはexpectDataのようなすべての要件を持っています。それはそれ自身で実行するべきではありません。この問題を解決するにはどうすればよいですか?私はそれが、どうやら

+0

「物事が壊れる」場合SkipTestがテストをスキップするでしょう使用することを意味していても提案を気にしません。十分じゃない。完全なスタックトレースを送信します。今は問題の原因を推測しているようです。 –

+0

私はすべてのテストが失敗したと言うときに失敗しました。あなたは私の投稿を編集させてください。 –

+0

フォーマットのコンソール出力をコードでお願いします。私は携帯電話に乗っているので、手伝ってはいけません。 –

答えて

0

私の現在のテストフレームワークをrestrucutreサブクラスsuper()TestBaseクラス

from unittest.case import SkipTest 

    def test_check_expectData(self): 
     if self.expectData is None: 
      raise SkipTest 
関連する問題