Dav*_* D. 0 python django unit-testing mocking
## tests file
@mock.patch('profiles.models.create_stripe_charge', StripeMocks._mock_raises_stripe_error)
def my_test(self):
# ... stuff
## logic file
def create_stripe_charge(customer, amount_in_cents, capture=True):
# ... stuff
## mocks file
class StripeMocks:
def _mock_raises_stripe_error(self):
raise stripe.error.StripeError
Run Code Online (Sandbox Code Playgroud)
运行测试时,我遇到了_mock_raises_stripe_error() takes 1 positional argument but 3 were given'错误。
我知道我正在尝试用 1-args 方法模拟 3-args 方法,但是如果我只想告诉 Python:拜托,无论我的create_stripe_charge方法有多少个参数,我只想模拟它引发的情况一个例外。
执行此操作的正确语法是什么?谢谢。
要在调用模拟时引发异常,请将side_effect属性设置为异常:
@mock.patch('profiles.models.create_stripe_charge',
side_effect=stripe.error.StripeError)
def my_test(self, mock_create_stripe_charge):
# ...
Run Code Online (Sandbox Code Playgroud)
您create_stripe_charge()完全替换为仅接受一个参数 ( ) 的函数self。您可以用来*args捕获其他参数(并且由于您使用了未绑定的方法,因此根本不需要使用self),但是使用新函数并不是一个好主意。
使用正确的模拟来替换函数还可以让您断言模拟被正确调用,并且您可以对传入的参数进行断言。当您使用自己的函数时,您不能这样做。