1 つのインターフェイスを実装する 2 つのクラスがあります。
public interface DataAccess { /*....*/ }
public class DataAccessCache implements DataAccess { /*...*/ }
public class DataAccessMemory implements DataAccess { /*...*/ }
今、私はCPU
カプセル化するDataAccessCache
という別のクラスを持っていDataAccessMemory
ます(両方ともプライベートインスタンス変数です):
private DataAccessCache cache;
private DataAccessMemory memory;
これら 2 つのクラスをモックするために、2 つのセッター メソッドがあります。
public void setDataAccessCache( DataAccessCache cache ) {
this.cache = cache;
}
public void setDataAccessMemory( DataAccessMemory memory ) {
this.memory = memory;
}
ペアをメモリとキャッシュにput(String key, String value)
入れるCPUメソッドをテストしたい。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)
どうすればこれを正しくすることができますか?