模拟 - 测试是否在不指定参数的情况下调用方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模拟 - 测试是否在不指定参数的情况下调用方法相关的知识,希望对你有一定的参考价值。

我正在使用Mock库嘲笑Django的send_mail函数:

from django.core.mail import send_mail
send_mail = Mock()

当我想断言send_mail被调用时,我的问题出现了。我不能使用assert_called_with或相关的方法,因为他们期望参数,我不会完全知道/不想在测试环境中输入(它涉及模板)。我只是想知道已经调用的方法。打印语句清楚地表明它被调用,但如果我尝试这样做:

self.assertEqual(send_mail.called, True) 

我收到一个错误,因为被调用的属性仍为False。如何在不必指定属性的情况下测试方法是否已被测试。

答案

你还没有正确地模仿send_mail方法。您只能在自己的模块中反弹名称,而不是其他任何地方。

这将是一个正确的重新绑定:

from django.core import mail
mail.send_mail = Mock()

但是使用patch() context manager / decorator更容易:

with patch('django.core.mail.send_mail') as mocked_send_mail:
    # run your tests
    self.assertTrue(mocked_send_mail.called)

以上是关于模拟 - 测试是否在不指定参数的情况下调用方法的主要内容,如果未能解决你的问题,请参考以下文章

Easymock:如何在不可见的情况下模拟受保护方法的调用

如何在不调用 fixture.detectChanges() 的情况下绑定模板?

js - 在不指定元素的情况下模拟按键

java Web工程,如何在不传参数的情况下,判断WebService接口是不是开放

如何在不使用 Angular 的 spyOn 的情况下检查服务中的方法是不是在 Jasmine 单元测试中被调用?

在不输入第一个参数的情况下使用管道