1

unittestで失敗した後にテストを継続する最良の方法は何ですか?

#!/usr/env/bin python2.7

import unittest
from fib import fib


class FibTests(unittest.TestCase):

    def test_0(self):
        self.assertEqual(fib(0), 0)
        self.assertEqual(fib(1), 1)
        self.assertEqual(fib(2), 1)
        self.assertEqual(fib(5), 5)
        self.assertEqual(fib(10), 55)

    def test_1(self):
        self.assertEqual(fib(0), 1)

    def test_2(self):
        self.assertEqual(fib(1), 0)
        self.assertEqual(fib(5), 0)

if __name__ == '__main__':
    suite = unittest.TestLoader().loadTestsFromTestCase(FibTests)
    result = unittest.TextTestRunner(verbosity=2).run(suite)

test_2 を見ると、2 つではなく 1 つの失敗があることがわかります。

さらに、最後に次のように結果を収集するにはどうすればよいですか。

test_0 -- 0 failures
test_1 -- 1 failures
test_2 -- 2 failures

動機:

テストゲームを作成しようとしています。人々はテストを提出し、他のプログラムに失敗するとポイントを獲得します。各テストの失敗は 1 ポイントです。この種の機能を提供する最も簡単な方法は何ですか?

4

1 に答える 1

1

各テストケースを異なるメソッドに分ける必要があります。新しいテストを簡単に作成して入力時間を節約するために、このような入力に基づいてテスト ケースを自動生成できます。

#!/usr/env/bin python2.7

import unittest
from fib import fib


class FibTests(unittest.TestCase):
    pass

def test_gen(expected, actual):
    def test_method(self):
        return self.assertEqual(expected, actual)
    return test_method

if __name__ == '__main__':
    cases = ((fib(1), 1), (fib(2), 1), (fib(5), 5))
    for index, case in enumerate(cases):
        test_name = 'test_{0}'.format(index)
        test = test_gen(case[1], case[0])
        setattr(FibTests, test_name, test)
    suite = unittest.TestLoader().loadTestsFromTestCase(FibTests)
    result = unittest.TextTestRunner(verbosity=2).run(suite)
于 2013-01-17T07:34:17.757 に答える