python - 如何为简单的 if 语句创建魔术模拟来检查列表中是否存在项目
问题描述
我正在尝试测试我的方法,它只是检查一个字母是否在任一字母列表中。如果它在列表 a 中,那么我将 myletter 分配给一个名为 yes 的导入对象;否则,我将 myletter 分配给一个名为 no 的导入对象。
我尝试使用 MagicMock 为其编写测试文件,但由于我对使用 mock 和 magic mock 进行测试的概念不熟悉,我不知道如何进一步继续。我将不胜感激有关如何使用它并进一步继续的任何提示或任何解决方案。
我应该为每个列表创建模拟对象并为 myletter 创建另一个模拟对象以再次检查这两个模拟对象还是我应该如何继续这样做?
我的代码:
from mydir.newdir import yes
from mydir.newdir import no
def yes_no_det(check_letter: str):
first_list = ['a', 'b', 'c']
second_list = ['d', 'e', 'f']
myletter = None
if check_letter:
if check_letter in first_list:
myletter = yes.att
elif check_letter in second_list:
myletter = no.att
return myletter
到目前为止我的测试:
import unittest
from mock import MagicMock, patch
class letter_check_test(TestCase):
with patch('mydir.newdir.check_letter_py.yes') as mock_yes,\
patch('mydir.newdir.check_letter_py.no') as mock_no:
from mydir.newdir.check_letter_py import yes_no_det
mock_check_letter = MagicMock()
mock_yes = mock_yes.att
mock_no = mock_no.att
def test_check_letter(self):
# I am not sure how further to continue or what to check here
更新了可能正确的测试代码:
class letter_check_test(TestCase):
def test_yes_det():
assert yes_no_det('a') == mydir.newdir.yes
def test_no_det():
assert yes_no_det('f') == mydir.newdir.no
def test_neither_det():
assert yes_no_det('x') == None
谢谢你的任何答案。请让我知道我是否需要更改/删除此帖子或任何内容而不降级或报告它。我真的很感激!
解决方案
在这种情况下,它只是使用 assert 或 assertequal 代码。例如:
class letter_check_testYES(Testing, TestingsCases):
def test_letter_check(self):
with patch('mydir.newdir.check_letter_py.yes') as YES:
from mydir.newdir.check_letter_py import yes_no_det
assert yes_no_det('a') == YES
class letter_check_testNO(Testing, TestingsCases):
def test_letter_check(self):
with patch('mydir.newdir.check_letter_py.no') as NO:
from mydir.newdir.check_letter_py import yes_no_det
assert yes_no_det('f') == YES
class letter_check_test(Testing, TestingsCases):
from mydir.newdir.check_letter_py import yes_no_det
assert yes_no_det('f') == NONE
推荐阅读
- flutter - GlobalMaterialLocalizations 和 flutter_localizations 的意义何在?
- excel - 在 Excel 中创建由 CTRL+ 和 CTRL- 映射的放大和缩小循环函数
- python - 如何在初始化类python期间覆盖实例变量属性行为
- documentation-generation - 有没有办法使用 Sandcastle Help File Builder 工具仅生成更新文件的文档?
- c# - 字典:在给定键的范围内查找最小值/最大值并返回它们的键
- google-app-engine - 如何启用 Cloud Pub/Sub API 以在 App Engine 中使用它
- reactjs - 多次使用 React-Dom 的渲染
- haskell - 无法与预期类型匹配
- python - 如何获取 Peewee ORM 包含使用连接的列
- javascript - 如何使这项工作适用于 BINGO 游戏?