【发布时间】:2022-06-14 09:44:28
【问题描述】:
我正在进行单元测试(基本上使用 pytest/unittest/mockito),我需要模拟使用 Pydantic (BaseModel) 实现的类的实例化。显然,如果不传递有效的有效数据,就不可能在这些情况下模拟一个类。我不能使用“ANY()”,因为会发生错误。有什么方法可以模拟这个类而不必使用有效数据作为参数?
注意:显然问题是因为正在使用 Pydantic。
我在互联网上做了很多研究,但没有运气???? ...有什么想法吗?
以下是我在测试中以非常简化的方式使用的代码...
pydantic_class.py - Pydantic (BaseModel) 类
from pydantic import BaseModel
from some.path.sometypea import SomeTypeA
from some.path.sometypeb import SomeTypeB
class PydanticBaseModel(BaseModel):
someInt: int
someStr: str
someTypeA: SomeTypeA
someTypeB: SomeTypeB
code_to_test.py - 测试代码
from some.path.pydantic_class import PydanticBaseModel
class ClassToTest():
def test_method(self)
pydantic_base_model = PydanticBaseModel(
someInt=0,
someStr="value",
someTypeA=<SomeTypeAObj>,
someTypeB=<SomeTypeBObj>
)
[...]
test_code.py - 测试代码
import unittest
from mockito import ANY, when
class SomeTypeTest(unittest.TestCase):
def test_sometype_method(self):
when(PydanticBaseModel(
someInt=ANY(),
someStr=ANY(),
someTypeA=ANY(),
someTypeB=ANY()
)).thenReturn(None)
[...]
测试输出(简体)
(test-project) [username@username-pc test-project]$ pytest -sv ./test_code.py
=================================================================== test session starts ====================================================================
[...]
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> ???
E pydantic.error_wrappers.ValidationError: 4 validation errors for PydanticBaseModel
E someInt
E value is not a valid integer (type=type_error.integer)
E someStr
E str type expected (type=type_error.str)
E someTypeA
E value is not a valid dict (type=type_error.dict)
E someTypeA
E value is not a valid dict (type=type_error.dict)
pydantic/main.py:338: ValidationError
================================================================= short test summary info ==================================================================
FAILED test_code.py::SimulacaoComboTest::test_sometype_method - pydantic.error_wrappers.ValidationError: 2 validat...
==================================================================== 1 failed in 0.94s =====================================================================
谢谢! ????
【问题讨论】:
标签: mockito pytest python-unittest pydantic python-unittest.mock