在nose parameterize.expand调用中使用class方法

时间:2015-06-16 17:56:57

标签: nose nose-parameterized

我有一个构建大量测试条件的生成器方法,我知道我可以调用非类方法,但我更喜欢将参数构建方法作为我的测试类的一部分。有没有办法做到这一点?

这里是我想要做的简单描述:

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方法在调用它的测试类中。

1 个答案:

答案 0 :(得分:3)

只需删除@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 decorator as a staticmethod