字典神奇地转换为设置在nosetests中

run*_*g.t 2 python dictionary set nosetests

我创建了以下鼻子测试:

@nottest
def _test_validate_helper_eq(self, input, expected, *args, **kwargs):
    result = testedObcject.validatePrice(input, *args, **kwargs)
    eq_(result, expected)


def test_validate_price(self):
    yield self._test_validate_helper_eq, {}, {'price':'0'}
    yield self._test_validate_helper_eq, {}, {'price', -1}, 'price', -1`
Run Code Online (Sandbox Code Playgroud)

validatePrice是测试对象的函数:

def validatePrice(self, input, name = 'price', default_price=0):
  ...
  return validated_input
Run Code Online (Sandbox Code Playgroud)

所以我有一个测试生成器,使用_test_validate_helper_eq函数生成2个测试.还_test_validate_helper_eq函数采用不同数量的参数,并将其传递至validatePrice

首先测试PASS,但第二个测试有问题.正如你所看到的,我正在传递额外的2个参数,name并且default_price.此测试失败,并出现以下错误:AssertionError: {'price': u'-1'} != set(['price', -1])

事实证明,expected参数的值是一个set而不是我定义的字典.我不知道这种转换是由鼻子还是因为*args并且**kwargs被使用.

任何想法是什么以及如何解决它?

Ste*_*son 5

错字:

yield self._test_validate_helper_eq, {}, {'price', -1}, 'price', -1`
Run Code Online (Sandbox Code Playgroud)

这里{'price', -1}创建一个集合,你想要一个字典,可能意味着键入{'price': -1}