2014-01-22 71 views
0

我正在使用mockito進行存根。在多個層次上沾污

這是我的設置的最小表示。假設getter和setter到位

class Person { 
    String name; 
} 

class Car { 
    Person owner; 
} 

class CarPool { 
    Car car; 

    String getOwner() { 
     car.getOwner.getName() 
    } 
} 

class testClass { 
    CarPool carPool = new CarPool(); 

    Car car = mock(Car.class); 
    when(car.getOwner.getName()).thenReturn("name"); 

    carPool.setCar(car); 

    assertEquals(carPool.getOwner, "name"); 
} 

嘗試此,當作爲getOwner沒有媒體鏈接存根我得到一個空指針。是否有可能做到這樣的樁?如果不是,這種情況下最好的解決方案是什麼?

+0

怎麼會會的Mockito知道什麼對'carPool.getOwner'回報? – xyz

+0

從理論上講,Mockto知道所有者的類型。所以它可以激活一個嘲笑的getName方法的模擬Owner對象 –

+0

我的意思是什麼值?我不認爲它會如此聰明地自己做 – xyz

回答

2

你可以做很深的樁。

Car car = mock(Car.class, Mockito.RETURNS_DEEP_STUBS); 

請注意,深鑿通常意味着代碼不乾淨。考慮下面的文檔引用:

每次模擬返回一個模擬仙女死亡。

來源:Mockito documentation

+0

正是我所要求的,但我絕對會讀到德米特法則以及爲什麼我不應該使用這個 –