我有2個問題:與私有方法(白箱測試)方法處理很多條件
1)在JUnit中,你不應該測試或模擬私有方法。但是如何處理,當他們在公共方法中被調用時。假設我有以下設置:
public void method(String value){
if(value.contains("something")){
doSomethingToString(value);
}
else{
//do something else
}
}
private void doSomethingToString(String value){
Object obj = service.getObject(); //service is mocked in my test-class
//do something with the obj and value
}
我在做一個白盒測試,所以我知道方法和發生了什麼。現在我想測試公共方法method(String value)
。當我現在只考慮發生在那裏的事情時,我會陷入困境,因爲我需要影響私人方法返回的service.getObject()
。是否可以,當我繼續時,就像我願意的那樣,意思是使用doReturn(objectICreatedInMyTestClass).when(service.getObject())
還是需要另尋方式?
2)具有多個條件的方法。例如:
public void method(String value){
if(value.contains("something")){
Object obj = service.getObj(value);
}
else{
//do something else
}
if(obj.getAddress == null){
//do something
}
else{
//do something else
}
if (obj.getName == "Name") {
// do something
}
else
{
// do something else
}
}
需要多少次測試此方法?只有兩次,一旦所有條件都恢復正常,其次,它們都返回錯誤?還是建議測試每種可能的情況?這意味着條件1 =真,條件2 =假,條件3 =假,然後條件1 =真,條件2 =真,條件3 =假等等(= 8個可能性)的測試。
可能使用http://stackoverflow.com/questions/34571/how-to-test-a-class-that-has-private-methods-fields-or-inner-classes。這就是說,是的,你應該測試你的代碼的各個分支。 https://en.wikipedia.org/wiki/Code_coverage#Basic_coverage_criteria –
我在那裏的問題是,他們只使用一個條件。當我在第一次測試時,例如我有value =「Stringsomething」,obj.getAddress等於null,obj.getName等於「Name」,那麼我是否有完整的分支覆蓋?我有所有的條件設置爲true。而在第二個測試中,我設置了value =「String」,obj.getAddress!= null和obj.getName(「String」),所以現在他們都覆蓋了兩個測試。但是,我仍然需要覆蓋所有其他可能性嗎? – user5417542