У меня есть 2 класса, которые реализуют один интерфейс.
public interface DataAccess { /*....*/ }
public class DataAccessCache implements DataAccess { /*...*/ }
public class DataAccessMemory implements DataAccess { /*...*/ }
Теперь у меня есть еще один класс с именем CPU
, который инкапсулирует DataAccessCache
и DataAccessMemory
(оба являются частными переменными экземпляра), например:
private DataAccessCache cache;
private DataAccessMemory memory;
Чтобы издеваться над этими двумя классами, у меня есть 2 метода установки:
public void setDataAccessCache( DataAccessCache cache ) {
this.cache = cache;
}
public void setDataAccessMemory( DataAccessMemory memory ) {
this.memory = memory;
}
Я хочу протестировать метод ЦП put(String key, String value)
, который поместит key-value
пару в память и кеш. Я хочу убедиться, что метод put кеша и метод put памяти вызываются внутри метода 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)
Как я могу сделать это правильно?