1

テスト条件の大規模なセットを構築するジェネレーター メソッドがあります。非クラス メソッドを呼び出すことができることはわかっていますが、むしろパラメーター構築メソッドをテスト クラスの一部にする必要があります。これを行う方法はありますか?

ここに私がやりたいことの簡単な説明があります:

class MyUnitTestClass(TestCase):
  @staticmethod
  def generate_scenarios():
    yield ('this_is_my_test', 1, 2)

  @parameterized.expand(generate_scenarios())
  def test_scenario(self, test_name, input, expected_output)
    self.assertEquals(input+input, expected_output) 

今、私は次のことをしなければなりません:

def generate_scenarios():
    yield ('this_is_my_test', 1, 2)    

class MyUnitTestClass(TestCase):

  @parameterized.expand(generate_scenarios())
  def test_scenario(self, test_name, input, expected_output)
    self.assertEquals(input+input, expected_output) 

TL;DR:シナリオの generate_scenarios メソッドを、それを呼び出しているテスト クラス内に配置したいと考えています。

4

1 に答える 1

4

削除するだけ@staticmethodで機能するはずです。generate_scenariosクラス内で定義された単なる関数になり、パラメータ化された展開が機能します。

from unittest import TestCase

from nose_parameterized import parameterized

class MyUnitTestClass(TestCase):
  def generate_scenarios():
    yield ('this_is_my_test', 1, 2)

  @parameterized.expand(generate_scenarios())
  def test_scenario(self, test_name, input, expected_output):
    self.assertEquals(input+input, expected_output)

そして、これが私がそれを実行した方法です:

$ nosetests stackoverflow.py -v
test_scenario_0_this_is_my_test (stackoverflow.MyUnitTestClass) ... ok

----------------------------------------------------------------------
Ran 1 test in 0.002s

OK

Python デコレータを staticmethod として確認することもできます。

于 2015-06-17T21:48:36.930 に答える