我正在使用来自 voidspace 的模拟并尝试使用 unittest2 执行一些测试,但行为很奇怪。当我使用“@patch.object(Test,'asd')”作为补丁时,我在函数参数中得到了模拟对象。如果我使用 @patch.object(Test,'asd',new_fun) 作为补丁,我不会得到参数之一。我正在使用模拟 1.0.1
在这里,您可以看到一个说明问题的小代码示例。我想尝试了解此问题是否与我执行补丁的方式有关,或者这是否是库中的问题。
import unittest2 as unittest
from mock import patch
class Test:
def asd(self, a, b =""):
print "1"
class Test1:
def kk(self, l):
Test().asd("1")
def kk1(self, l):
Test().asd("1","1")
@patch.object(Test,'asd')
class MockClassUT(unittest.TestCase):
def test_stat_process(self, my_mock):
t = Test1()
def test_stat_process1(self, my_mock):
t = Test1()
def test_stat_process2(self, my_mock):
t = Test1()
def new_fun(*args, **kwargs):
print "1"
@patch.object(Test,'asd',new_fun)
class MockClassUT1(unittest.TestCase):
def test_stat_process(self, my_mock):
t = Test1()
t.kk("1")
my_mock.assert_called_with("k")
testloader = unittest.TestLoader()
testnames = testloader.getTestCaseNames(MockClassUT)
suite = unittest.TestSuite()
for name in testnames:
suite.addTest(MockClassUT(name))
testnames = testloader.getTestCaseNames(MockClassUT1)
for name in testnames:
suite.addTest(MockClassUT1(name))
print testnames
unittest.TextTestRunner(verbosity=2).run(suite)