我创建了以下鼻子测试:
@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,但第二个测试有问题。
正如您所看到的,我传递了另外两个参数,name
和default_price
。
此测试失败,并出现以下错误:AssertionError: {'price': u'-1'} != set(['price', -1])
事实证明expected
参数的值是set
而不是我定义的字典。
我不知道这种转换是由鼻子做出的还是因为*args
和**kwargs
被使用了。
任何想法是什么以及如何解决它?
答案 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}
是一个集合文字。