我创建一个界面,为我的控制器提供电子邮件验证
class EmailValidatorInterface(ABC):
""" Interface to EmailValidator use case """
@abstractmethod
def is_valid(self, email: str) -> bool:
""" Specific case """
raise Exception("Should implement method: is_valid")
这是我的控制器实现
class SignUpController(RouteInterface):
def __init__(self, emailValidator: EmailValidatorInterface):
self.emailValidator = emailValidator
def route(self, http_request: Type[HttpRequest]) -> HttpResponse:
如何为我的EmailValidator创建模拟? 我正在尝试使用mock.patch,但不知道如何初始化mock
看看我的测验
def test_should_return_400_if_invalid_param_is_provided():
with mock.patch('EmailValidatorStub') as MockEmailValidator:
MockEmailValidator.return_value.is_valid.return_value = False
sut = SignUpController(EmailValidatorStub())
attributes = {
"name": faker.word(),
"login": faker.word(),
"email": "any_email",
"email_confirmation": "any_email@mail.com",
"password": "any_password",
"password_confirmation": "any_password"
}
request = HttpRequest(body=attributes)
httpResponse = sut.route(request)
assert httpResponse.status_code == 500
我认为这里不需要
mock.patch
,因为您可以使用依赖注入。换句话说,只需像平常一样创建一个子类,但添加特定于测试的实现:然后在测试中实例化它:
您可以为正在测试的每个场景创建一个单独的模拟类,也可以添加一个
__init__()
方法,该方法接受每个场景之间可能不同的参数。或者两者的某种结合。mock不应该包含任何逻辑,而应该只满足一个经过测试的特定场景相关问题 更多 >
编程相关推荐