20

カスタムクラス内でノーズテストジェネレーターを実行することは可能ですか? この例を単純なクラスベースのバージョンに変換しようとしています:

file: trial.py
>>>>>>>>>>>>>>
class ATest():
    def test_evens(self):
        for i in range(0, 5):
            yield self.check_even, i, i * 3

    def check_even(self, n, nn):
        assert n % 2 == 0 or nn % 2 == 0

その結果、

$ nosetests -v trial.py
----------------------------------------------------------------------
Ran 0 tests in 0.000s

変更ログを調べたところ、これはバージョン0.9.0a1以降で機能するはずです。

どこが間違っていますか?

4

2 に答える 2

36

解決策はあまり期待されていないものです。nosetestsにジェネレーターメソッドを検出させるためにからサブクラス化しないでください。unittest.TestCasenosetests 1.1.3(GitHubからの最新)で動作するコード:

class TestA(object):
    def test_evens(self):
        for i in range(0, 5):
            yield self.check_even, i, i * 3

    def check_even(self, n, nn):
        assert n % 2 == 0 or nn % 2 == 0

また、TestAの代わりに使用してATestください。

test.py:2: TestA.test_evens[0] PASSED
test.py:2: TestA.test_evens[1] FAILED
test.py:2: TestA.test_evens[2] PASSED
test.py:2: TestA.test_evens[3] FAILED
test.py:2: TestA.test_evens[4] PASSED
于 2012-06-19T01:38:48.717 に答える
-7

unittest.TestCaseをサブクラス化する必要があると思います

import unittest

class ATest(unittest.TestCase):
    def test_evens(self):
        for i in range(0, 5):
            yield self.check_even, i, i * 3

    def check_even(self, n, nn):
        assert n % 2 == 0 or nn % 2 == 0
于 2011-07-21T16:18:49.803 に答える