Используйте метод класса в вызове parameterize.expand

У меня есть метод генератора, который строит большой набор критериев тестирования, я знаю, что могу сделать метод, не относящийся к классу, который вызывается, но я бы предпочел, чтобы метод построения параметров был частью моего класса тестирования. Есть ли способ сделать это?

Вот простое описание того, что я хочу сделать:

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 ответ

Решение

Просто удали @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 stackru.py -v
test_scenario_0_this_is_my_test (stackru.MyUnitTestClass) ... ok

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

OK

Вы также можете рассмотреть Python декоратор как статический метод

Другие вопросы по тегам