- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试为现有代码编写单元测试,这些代码编写得不好,但我发现很难进行单元测试。
def pay(self):
fraud = NewFraudCheck()
result, transaction = fraud.verify_transaction()
我目前的测试,我正在修补 NewFraudCheck 类
@patch checkout.pay.NewFraudCheck
def test_pay(self, mock_fraud_check):
mock_fraud_check.verify_transaction.assert_called()
测试失败并出现 ValueError,表明 verify_transaction 没有返回足够的值来解包。
我试过添加
mock_fraud_check.verify_data.return_value = (1, 1231231)
然而这似乎没有任何效果。
最佳答案
我会指出一些问题,但这个问题缺少一些细节,所以希望我能一次性解决所有问题:
您的语法错误:@patch checkout.pay.NewFraudCheck
。应该是@patch('checkout.pay.NewFraudCheck')
某处缺少一个具有函数 pay(self)
的类。该类位于某个模块中,这对于正确模拟 NewFraudCheck
很重要。我会将缺少的模块称为 other
。
NewFraudCheck
需要在查找的位置进行修补。这意味着,在神秘模块 other
中有一个定义了 pay(self)
的类,大概有一个 from pay import NewFraudCheck
。 那 是查找
NewFraudCheck
的地方,因此您的补丁需要如下所示:@patch('checkout.other.NewFraudCheck
)。更多信息在这里:http://www.voidspace.org.uk/python/mock/patch.html#where-to-patch
您需要分配/使用您的
补丁
的返回值,而不是直接从模拟中访问verify_transaction
。例如,它应该这样读:mock_fraud_check.return_value.verify_transaction.return_value = (1, 1231231)
。请注意包含 return_value
。
我想出的最终测试看起来像这样并通过了:
@mock.patch('checkout.other.NewFraudCheck')
def test_pay(self, mock_fraud_check):
# This is the class that lives in mystery module, 'checkout.other' and calls pay()
other_class = SomeOtherClass()
mock_fraud_check.return_value.verify_transaction.return_value = (1, 1231231)
other_class.pay()
mock_fraud_check.return_value.verify_transaction.assert_called()
关于Python 单元测试 : How to patch an entire class and methods,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52221123/
我是一名优秀的程序员,十分优秀!