小编Fun*_*tic的帖子

模拟一个全局变量

我一直在尝试为模块实现一些单元测试.名为alphabet.py的示例模​​块如下:

import database

def length_letters():
    return len(letters)

def contains_letter(letter):
    return True if letter in letters else False


letters = database.get('letters')   # returns a list of letters
Run Code Online (Sandbox Code Playgroud)

我想用我选择的一些值来模拟数据库的响应,但下面的代码似乎不起作用.

import unittests  
import alphabet   
from unittest.mock import patch   


class TestAlphabet(unittest.TestCase): 
    @patch('alphabet.letters')
    def setUp(self, mock_letters):
        mock_letters.return_value = ['a', 'b', 'c']   

    def test_length_letters(self):
        self.assertEqual(3, alphabet.length_letters())

    def test_contains_letter(self):   
        self.assertTrue(alphabet.contains_letter('a'))
Run Code Online (Sandbox Code Playgroud)

我见过很多例子,其中'patch'应用于方法和类,但不适用于变量.我不想修补方法database.get,因为我可能会在以后使用不同的参数再次使用它,所以我需要一个不同的响应.

我在这做错了什么?

python unit-testing patch mocking

20
推荐指数
4
解决办法
3万
查看次数

标签 统计

mocking ×1

patch ×1

python ×1

unit-testing ×1