编程语言
首页 > 编程语言> > python-在鼻子测试中存在代码后,为什么多重测试仍然有效?

python-在鼻子测试中存在代码后,为什么多重测试仍然有效?

作者:互联网

我有以下代码test_A.py模拟MyClass.mymethod:

from unittest import main
from mocker import Mocker, MockerTestCase
Class test_A(MockerTestCase):
  def setUp(self):
    self.m=Mock()
    MyClass.mymethod = self.m.mock()
    self.m.result(None)
    self.m.count(0,None)
    self.m.replay()

  def test_me(self):
    #Do something about MyClass.method

  def tearDown(self):
    self.m.restore()
    self.m.verify()

我还有另一个代码test_B.py,它不模拟MyClass.mymethod:

Class test_B(MockerTestCase):
  def setUp(self):
    pass

  def test_me(self):
    #Do something about MyClass.method

  def tearDown(self):
     pass

但是,当我执行“ nosetests test_A.py test_B.py”时,看起来在测试test_A.py并输入test_B.py之后,MyClass.mymethod仍然被模拟.不知道为什么以及如何解决它.谢谢!

解决方法:

该行:

MyClass.mymethod = self.m.mock()

确实确实用新对象替换了MyClass.mymethod().所有后续对MyClass.mymethod的引用都将是模拟对象,即使这些引用在不同的类中也是如此.

您想要的是一种替换MyClass.mymethod()的方法,该方法仅在test_A类中有效.实现此目的的最简单方法是在tearDown方法中还原原始方法:

Class test_A():
    def setUp(self):
        self.originalMyMethod = MyClass.mymethod
        self.m=Mock()
        MyClass.mymethod = self.m.mock()
        self.m.result(None)
        self.m.count(0,None)
        self.m.replay()

    def test_me(self):
        # Do something about MyClass.mymethod

    def tearDown(self):
        self.m.restore()
        self.m.verify()
        MyClass.mymethod = self.originalMyMethod

标签:nosetests,python
来源: https://codeday.me/bug/20191202/2084899.html