有关于测试unittest 和 mock

mock 模拟 是辅助单元测试的一个模块 使用mock可以替换掉一部分依赖函数

例子:

 def test_add(self):
        count = Count()
        count.add = mock.Mock(return_value=13)
        result = count.add(8,5)
        self.assertEqual(result,13)

此处应用mock代替了Count中的add方法,使用return_value设定了返回值为13
断言成功

 

例子2:

def test_add(self):
        count = Count()
        count.add = mock.Mock(return_value=13, side_effect=count.add)
        result = count.add(8, 8)
        print(result)
        count.add.assert_called_with(8, 8)
        self.assertEqual(result, 16)

此处使用mock时增加了side_effect 参数,side_effect参数会替代return_value 所拟定的返回值,此时将调用count.add 而非return_value

 

例子3:

    @patch("function.multiply")
    def test_add_and_multiply2(self, mock_multiply):
        x = 3
        y = 5
        mock_multiply.return_value = 15
        addition, multiple = function.add_and_multiply(x, y)
        mock_multiply.assert_called_once_with(3, 5)

        self.assertEqual(8, addition)
        self.assertEqual(15, multiple)

使用patch()装饰器 在测试时将制定的对象替换为一个模拟,并且在结束时还原
这里模拟function.py文件中multiply()函数

def test_add_and_multiply2(self, mock_multiply):
此处将mock的multiply()函数重命名为mock_multiply
测试add_and_multiply方法 但是 multiply 存在问题 则使用 mock_multiply 代替并设置预设值

 

posted @ 2021-11-29 18:21  IVWT  阅读(59)  评论(0)    收藏  举报