[英]Junit: local variables and void methods
我對單元測試還很陌生,並且已經在線閱讀了很多材料,但是在弄清內容方面有些麻煩。
例如:如果我有以下代碼:
public class RandomClass
{
int a = 4;
public void foo(Object obj)
{
if(a == 4)
{
AnotherObject anotherObj = new AnotherObject();
anotherObj.setAttribute(obj.getFiled());
//Method call that will be suppressed
Anotherclass.anotherMethod(anotherObj);
}
}
}
我想到寫這樣的junit測試用例:
@Test
public void testFoo()
{
int a=4;
RandomClass randomClass = new RandomClass();
Object object = new Object();
object.setField("hey");
randomClass.foo(object);
}
我在這里有幾個問題。 我如何從我的junit設置整數a? 我現在設置的方式不會對單元測試用例產生任何影響。 當我調試單元測試時,a的值為NULL,因此它永遠不會通過if條件!
另外,方法foo返回一個void,所以我可能會測試/聲明什么?
編寫單元測試時,有兩種主要技術:
您會看到,您實際上編寫了“難以測試”的代碼-因為您在生產代碼中為AnotherClass調用了new 。 這似乎沒什么大不了,但是取決於AnotherClass是關於什么的……您真的不應該這樣做!
任何狀況之下; 我建議您觀看這些視頻,以學習如何編寫更適合單元測試的代碼。
測試通常從“設置”,“准備”或“安排”步驟開始,在該步驟中,將創建或修改被測對象,使其處於該特定測試所需的狀態。
因此,如果RandomClass
對象中的字段a
需要具有值4
(例如),則測試需要創建將該值作為構造函數參數傳遞的對象, 或者通過調用setter方法在該對象中設置值或直接訪問該字段。 在最壞的情況下,您可能需要使用Reflection來設置字段,但這將指示正在測試的類中存在設計問題。
下一步是測試代碼。 這是“安排,行動,聲明”術語(簡稱AAA)中的“行動”步驟。
最后,最后一步是“聲明”(驗證)所測試的代碼是否按照預期執行。
如果所測試的方法具有void
返回類型,則測試應通過狀態驗證或行為驗證來驗證其是否達到了預期的效果。
在第一種情況下,測試將在被測對象中調用某種getter方法,並將其用於某種類型的“斷言”(例如assertEquals(expectedValue, actualValue)
)。
在第二種情況下,測試將使用一些模擬庫,以驗證預期的調用是從被測代碼對一個或多個依賴項(被測類所依賴的其他對象或類)進行的。 例如,這里的測試可以驗證RandomClass#foo
是否確實調用了Anotherclass.anotherMethod(...)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.