【发布时间】:2016-06-28 04:02:18
【问题描述】:
我通常使用:
def create_patch(self, name, value = None):
patcher = patch(name)
mock = patcher.start()
mock.return_value = value
self.addCleanup(patcher.stop)
return mock
def assertXmlEqual(self, a, b):
with open(a, 'r') as f:
axml = f.read()
with open(b, 'r') as f:
bxml = f.read()
self.assertEqual(loads(dumps((parse(axml)))), loads(dumps((parse(bxml)))))
在测试用例中:
mockobj = self.create_patch('mymodule.myclass.mymethod', 'myvalue')
self.assertXmlEqual('expect.xml', 'result.xml')
但是对于每个单元测试类,我都必须复制它。
有什么方法可以让这些更独立于测试用例,更像一个库,比如 .net 中的 Moq 和 Assert 以及 Ruby 中的 mock 和 expect?
这是他们的行为方式。看?它们独立于测试用例。
Moq 和Assert:
var obj = new Moq.Mock<MyPackage.MyClass>() { CallBase = true };
obj.Setup(p => p.MyMethod(Moq.It.IsAny<string>())).Returns(false);
Assert.AreEqual(expect, result)
allow 和expect:
obj = double
allow(obj).to receive(:my_method).and_return('myvalue')
expect(result).to eq(expect)
expect(obj).to have_received(:my_method).exactly(3).times
【问题讨论】:
标签: python unit-testing mocking patch assert