ich in der Regel verwenden:Warum 'Selbst' für Patch und Assertion in Python benötigt?
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)))))
und in Testfälle:
mockobj = self.create_patch('mymodule.myclass.mymethod', 'myvalue')
self.assertXmlEqual('expect.xml', 'result.xml')
Aber für jede Unit-Test-Klasse, ich habe es zu kopieren.
Gibt es eine Möglichkeit diese mehr Testcase-unabhängig zu machen, eher wie ein lib, wie Moq
und Assert
in .net und mock
und expect
in Ruby?
Hier ist, wie sie sich verhalten. Sehen? Sie sind unabhängig von Testfällen.
Moq
und 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
und 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
Guter Versuch mit Vererbung. Gibt es noch einen eleganteren Weg wie '' Moq''' und '' Assert''' in .net und '' 'mock''' und' '' erwarten''' in Ruby? – Mike
@Mike - Soweit ich weiß, ist dies der Weg, dies mit Pythons "Unittest" zu erreichen. Ich weiß nicht, wie 'Moq' und' Assert' in .net funktionieren, noch weiß ich, wie 'mock' und' expect' in Ruby arbeiten. Was ist mit den zuvor genannten Frameworks, die sie "eleganter" machen? Welches Verhalten suchst du genau? Es ist möglich, dass es ein anderes Unit-Test-Framework für Python gibt, das näher an dem ist, wonach Sie suchen. – mgilson
Ich habe mehr Details hinzugefügt :) – Mike