web-dev-qa-db-ja.com

unittestでジェネレータをテストする方法は?

Pythonで小さなイテレータをプログラムしました。

class anything():
    def __init__(self):
        self.i=1

    def __iter__(self):
        return self

    def next(self):
        if self.i>100:
            raise StopIteration
        self.i=self.i+1
        return self.i

Pythonのunittestを使用して、生成されたリストの値が偶数かどうかを確認したいと思います(Pythonでユニットのテストを学習するためにそれを行っています)。お気に入り:

def main()
   for x in anything():
        assert x%2==0

しかし、私はそれを達成する方法を知りません。オンラインでいくつかの資料を読みましたが、クラス内で単体テストを管理する方法を教える例はありません。

6
asgard

以下はテストの例です。ところで、あなたのクラスにはバグがあります。恐らく self.i=self.i+iself.i=self.i+1

#!/usr/bin/env python
# -*- Python -*-
"Unit test for Columnize"
import unittest
from it import anything

class TestI(unittest.TestCase):

    def test_basic(self):
        for x in anything():
            if x % 2 == 0:
                self.assertTrue(True, "Found value %d" % x)
                return
        self.assertTrue(False, "No even found in Anything")


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