[英]Using Mockito test super class method
class Sup { public void someMethod(){ // do something } }
class Sub extends Sup { public void method(Object obj) { if (obj == null) { super.someMethod(); return; } // do something } }
class SubTest { @Test public void testMethodArgIsNull() { Sub s = new Sub(); Sub spyS = spy(s); spyS.method(null); //test case fails verify(spyS).someMethod(); } }
如果我在Sub like中重新定義方法“ method”,而不是調用super.someMethod(),則如果我調用someMethod(),則測試用例通過。 但我不想對代碼進行任何更改。 幫我測試代碼。
我不知道你為什么要避免更改代碼,但你可能有自己的理由。 您不能簡單地驗證是否對間諜調用了super方法。 但是,您仍然可以在不更改代碼的情況下測試此方法。 但是,這樣做的唯一方法就是沒有間諜。 換句話說,您將必須使用其他模擬的斷言或驗證來驗證someMethod
的功能。 例如,如果Sup類被如此實現:
class Sup {
private boolean somethingDone = false;
public boolean isSomethingDone() {
return somethingDone;
}
public void someMethod(){
somethingDone = true;
}
}
然后,您可以這樣編寫測試用例:
@Test
public void testMethodArgIsNull() {
Sub s = new Sub();
s.method(null);
assertThat(s.isSomethingDone(), is(true));
}
話雖這么說, super.someMethod()
Sub.someMethod()
(不存在)之外的任何東西調用super.someMethod()
)看起來就像是在等待發生的Sub.someMethod()
。 如果Sub.someMethod()
不存在,則super.someMethod()
等同於someMethod()
。 但是,如果將來有人要重寫它,您是否真的想讓method(Object o)
偷偷地繞過被重寫的那個並調用超級實現?
通過調用super.someMethod()
你super.someMethod()
冒險將來的風險。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.