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

时间:2013-07-18 10:10:04

标签: 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`

validatePrice是测试对象的函数:

def validatePrice(self, input, name = 'price', default_price=0):
  ...
  return validated_input

所以我有一个测试生成器,使用_test_validate_helper_eq函数生成2个测试。 此外,_test_validate_helper_eq函数会使用不同数量的参数并将其传递给validatePrice

首先测试PASS,但第二个测试有问题。 正如您所看到的,我传递了另外两个参数,namedefault_price。 此测试失败,并出现以下错误:AssertionError: {'price': u'-1'} != set(['price', -1])

事实证明expected参数的值是set而不是我定义的字典。 我不知道这种转换是由鼻子做出的还是因为*args**kwargs被使用了。

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

2 个答案:

答案 0 :(得分:5)

错字:

yield self._test_validate_helper_eq, {}, {'price', -1}, 'price', -1`

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

答案 1 :(得分:2)

yield self._test_validate_helper_eq, {}, {'price', -1}, 'price', -1`
#                                                ^

你的意思是:吗? {a, b, c}是一个集合文字。