将整数与MagicMock进行比较在Python中的unittest中不起作用

Comparing integer to MagicMock not working inside unittest in python(将整数与MagicMock进行比较在Python中的unittest中不起作用)
本文介绍了将整数与MagicMock进行比较在Python中的unittest中不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个类,它使用一个类变量来选择要执行的逻辑。

#in file1:

class SomeHelper():
    def __init__(self):
        self.my_var = 0

#in file2: 
import file1
class MyClass():
    ...
    ...
    def calculate():
        inst = file1.SomeHelper()
        if x > inst.my_var:
           etc etc

我正在编写一个单元测试,并在另一个文件中模拟SomeHelper():

from file 2 import MyClass
# tried both
@patch('file2.file1') OR @patch('file2.file1.SomeHelper')
def test_calculate(self, mock_helper):
    mock_helper.my_var = 0
    to_test = MyClass.calculate()

我收到以下错误:

在‘MagicMock’和‘int’的实例之间不支持TypeError:‘>’。

我以为我在修补模块之后定义了my_var

推荐答案

以下是Python 3.7.5的单元测试解决方案:

file1.py

class SomeHelper():
    def __init__(self):
        self.my_var = 0

file2.py

import file1


class MyClass():
    @classmethod
    def calculate(cls):
        x = 1
        inst = file1.SomeHelper()
        if x > inst.my_var:
            return True
        return False

test_file2.py

import unittest
from unittest.mock import patch
from file2 import MyClass


class TestMyClass(unittest.TestCase):
    @patch('file2.file1')
    def test_calculate(self, mock_file1):
        inst = mock_file1.SomeHelper.return_value
        inst.my_var = 0.5
        to_test = MyClass.calculate()
        self.assertTrue(to_test)
        mock_file1.SomeHelper.assert_called_once()

    @patch('file2.file1')
    def test_calculate_2(self, mock_file1):
        inst = mock_file1.SomeHelper.return_value
        inst.my_var = 2
        to_test = MyClass.calculate()
        self.assertFalse(to_test)
        mock_file1.SomeHelper.assert_called_once()


if __name__ == '__main__':
    unittest.main()

单元测试结果和覆盖率报告:

..
----------------------------------------------------------------------
Ran 2 tests in 0.002s

OK
Name                                       Stmts   Miss  Cover   Missing
------------------------------------------------------------------------
src/stackoverflow/50242955/file1.py            3      1    67%   3
src/stackoverflow/50242955/file2.py            8      0   100%
src/stackoverflow/50242955/test_file2.py      16      0   100%
------------------------------------------------------------------------
TOTAL                                         27      1    96%

源代码:https://github.com/mrdulin/python-codelab/tree/master/src/stackoverflow/50242955

这篇关于将整数与MagicMock进行比较在Python中的unittest中不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Leetcode 234: Palindrome LinkedList(Leetcode 234:回文链接列表)
How do I read an Excel file directly from Dropbox#39;s API using pandas.read_excel()?(如何使用PANDAS.READ_EXCEL()直接从Dropbox的API读取Excel文件?)
subprocess.Popen tries to write to nonexistent pipe(子进程。打开尝试写入不存在的管道)
I want to realize Popen-code from Windows to Linux:(我想实现从Windows到Linux的POpen-code:)
Reading stdout from a subprocess in real time(实时读取子进程中的标准输出)
How to call type safely on a random file in Python?(如何在Python中安全地调用随机文件上的类型?)