Test sınıfımda yaygın olarak kullanılan bir Bar
nesne oluşturan özel bir yöntemim var . Bar
Yapıcı çağırır someMethod()
benim alay nesnede yöntem:
private @Mock Foo mockedObject; // My mocked object
...
private Bar getBar() {
Bar result = new Bar(mockedObject); // this calls mockedObject.someMethod()
}
Bazı test yöntemlerinde someMethod
de kontrol etmek istediğim o test tarafından çağrıldım. Aşağıdaki gibi bir şey:
@Test
public void someTest() {
Bar bar = getBar();
// do some things
verify(mockedObject).someMethod(); // <--- will fail
}
Bu başarısız olur, çünkü alay konusu nesne someMethod
iki kez çağrıldı. Test metotlarımın metotumun yan etkilerini önemsemesini istemiyorum getBar()
, bu yüzden sahte nesnemi sonunda sıfırlamak mantıklı olur getBar()
mu?
private Bar getBar() {
Bar result = new Bar(mockedObject); // this calls mockedObject.someMethod()
reset(mockedObject); // <-- is this OK?
}
Soruyorum, çünkü belgeler sahte nesneleri sıfırlamanın genellikle kötü testlerin göstergesi olduğunu gösteriyor. Ancak, bu bana iyi geliyor.
Alternatif
Alternatif seçim arıyor gibi görünüyor:
verify(mockedObject, times(2)).someMethod();
Kanımca, her testi getBar()
, kazançlar için beklentileri hakkında bilmeye zorlar .