2011-08-11 11 views
6

unittestを使い始めようとしていますが、setUpClass()が問題になりました。ここに私のテストコードは、アサートエラーメッセージがself.testvar == None、とはsetUpClass()によって変更されていないことを示す、表示されている...ユニットテストsetUpClassが動作しない

import unittest 

class TestRepGen(unittest.TestCase): 
    """ Contains methods for training data testing """ 

    testvar = None 

    @classmethod 
    def setUpClass(cls): 
     cls.testvar = 6 

    def test_method(self): 
     """ Ensure data is selected """ 
     self.assertIsNotNone(self.testvar,"self.testvar is None!") 

# run tests 
if __name__ == '__main__': 
    unittest.main() 

です。私のコードに何か問題がありますか?

IDE(Wing)からコードを実行するか、コマンドラインから直接実行すると同じ結果になります。記録のために、私はWindows7の下でPython 3.2.1を使用しています。

+0

私は、Windows 7でPython 2.7でコードを試しました。うまくいき、テストに合格しました。上記のスクリプトを_exactly_実行すると、本当にうまくいきませんか? docs for Python 3.3は、 'setUpClass'の振る舞いの変化を示していません。 – agf

+0

あなたが貼り付けたコードは、python27とpython 3.2.1でWindows 7で動作します。 – stderr

+0

setUpClassを使っている理由はありますか? 'def setUp(self)'? – Bogdan

答えて

1

オクラホマ - それは私の間違いであったことを認めてもらいました。私は3.2.1を使っていなければならない(と思っていた)ときに3.1.2を使っていました。私は今、正しいバージョンに変更されている、すべてがうまく、テストが合格しています。

5

私はこのテストクラスを直接呼び出すのではなく、派生クラスを呼び出すと思います。

この場合、手動でsetUpClass()に電話する必要があります。自動的には呼び出されません。

class TestB(TestRepGen): 
    @classmethod 
    def setUpClass(cls): 
     super(TestB, cls).setUpClass() 

また、the docsclass-level fixtures are implemented by the test suiteにaccoding。だから、TestRepGenまたはtest_methodと奇妙な方法で投稿していない場合は、setUpClassが実行されないことがあります。

+0

agf - 私はクラスを直接呼び出していましたが、最終的にはサブクラス化されるため、あなたのコメントは便利です。ありがとう。 –

+0

@Alan - 解答として回答を投稿し、それを受け入れるべきです。 – agf

+0

ソリューションが投稿されました。 –

10

setUpClassは、2.7と3.2のようにunittestフレームワークには新しく追加されました(そしてあなたの時間を無駄にしてしまって残念です):古いバージョンで使用する場合は、

+0

ニースキャッチ!私はなぜsetUpClassが動作していないのだろうと思っていた。 – fthinker

+0

* zope.testing *のtestrunnerは 'setUpClass()'もサポートしていません。 – jnns

関連する問題