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

use class method in nose parameterize.expand call

我有一个构建大量测试标准的生成器方法,我知道我可以调用一个非 class 方法,但我更愿意将参数构建方法作为我的一部分测试 class。有办法吗?

这里简单描述一下我想做的事情:

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

只需删除 @staticmethod 即可。 generate_scenarios 只是在 class 中定义的一个函数,您将得到参数化扩展为您工作:

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 Whosebug.py -v
test_scenario_0_this_is_my_test (Whosebug.MyUnitTestClass) ... ok

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

OK

您可能还想查看 Python decorator as a staticmethod