如何为简单的 if 语句创建魔术模拟,检查列表中是否存在项目

How to create magic mock for simple if statement checking if an item exists in a list

我正在尝试测试我的方法,该方法仅检查字母是否在任一字母列表中。如果它在列表 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

感谢您的任何回答。如果我需要 change/delete 这个 post 或任何不降级或报告的东西,请告诉我。非常感谢!

在这种情况下,它只是使用 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