我有2類實現一個接口。模擬2個實現與Mockito接口的類的適當方法是什麼?
public interface DataAccess { /*....*/ }
public class DataAccessCache implements DataAccess { /*...*/ }
public class DataAccessMemory implements DataAccess { /*...*/ }
現在我有一個名爲CPU
封裝另一個類DataAccessCache
和DataAccessMemory
(均爲私有實例瓦爾),如:
private DataAccessCache cache;
private DataAccessMemory memory;
嘲笑這兩個類,我有2種setter方法:
public void setDataAccessCache(DataAccessCache cache) {
this.cache = cache;
}
public void setDataAccessMemory(DataAccessMemory memory) {
this.memory = memory;
}
我想測試CPU方法put(String key, String value)
這將把key-value
對進入內存和緩存。我想確保緩存的put方法和內存的put方法在CPU的put方法內調用。我測試像這樣(使用的Mockito):
public void test() {
CPU cpu = new cpu();
DataAccessCache cache = mock(DataAccessCache.class);
DataAccessMemory memory = mock(DataAccessMemory.class);
when(cache.put("key", "value")).thenReturn(true);
when(memory.put("key", "value")).thenReturn(true);
cpu.setDataAccessCache(cache);
cpu.setDataAccessMemory(memory);
cpu.put("key", "value");
verify(cache).put("key", "value");
verify(memory).put("key", "value");
}
然而,測試結果指出有一個錯誤:
java.lang.NullPointerException
at CPU.put(Unknown Source)
at CPUTest.test(Unknown Source)
我怎樣才能讓這對嗎?
很難說沒有CPU.put的代碼 –
你是對的Peter。在實現CPU.put()時,它具有用於相互排除的鎖定系統。這意味着,我必須獲取()和釋放()鎖定的部分。問題是我沒有嘲笑這些鎖,我們在這裏,CPU.put()無法繼續。謝謝。 – knd
沒問題 - 很高興你發現它 –