Имам 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;
}
Искам да тествам CPU метод 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)
Как мога да оправя това?