Я использую Java 6 и Mockito 1.8.5. Я хочу издеваться над методом класса члена, но я не могу понять, как это сделать. У меня есть эти классы ...Как мне высмеять метод поля члена класса?
public class CacheService implements CacheCallback {
private final Cache cache;
...
public static CacheService getInstance() {
return INSTANCE;
}
private CacheService() {
cache = new DefaultCacheImpl();
}
public boolean saveNodes(final Map<Long, XmlNode> nodeMap) {
...
cache.saveNodes(nodeMap);
}
...
}
public class DefaultCacheImpl implements Cache {
...
public void saveNodes(Map<Long, XmlNode> xmlNodes) {
dao.updateDB(xmlNodes);
}
...
}
Я не могу понять, как высмеивать метод «Кэш» FIELD-члена «saveNodes». Я насмешливо методы ниже, а потому, что нет сеттера в классе CacheService для поля, я не могу понять, как придать мои издеваться ..
public class PopulateCacheServiceImpl extends RemoteServiceServlet implements PopulateCacheService {
...
public Boolean initCache() {
boolean ret = false;
try {
setupMocks();
CacheService.getInstance().startCache();
PopulateCache.addTestEntriesToCache();
ret = true;
} catch (Exception e) {
e.printStackTrace(System.err);
ret = false;
} // try
return ret;
} // initCache
private void setupMocks() {
DefaultCacheImpl cache = mock(DefaultCacheImpl.class);
doAnswer(new Answer<Object>() {
public Object answer(InvocationOnMock invocation) throws Throwable {
return null;
}
}).when(cache).saveNodes(Matchers.anyMap());
} // setupMocks
}
Есть ли другие способы сделать это с Мокито? Спасибо, - Дэйв
Благодарим за это, но CacheService является одноэлементным и в настоящее время имеет частный конструктор. Я могу изменить исходный код, но мне все равно нужен только один экземпляр класса CacheService, плавающего вокруг jvm. – Dave
@Dave Вам следует серьезно подумать о том, чтобы избежать этой статической зависимости от 'CacheService.getInstance()' и использовать правильный DI, поэтому вам не придется взламывать вещи здесь и там, чтобы просто проверить. Ваш дизайн будет намного более чистым и элегантным. – Brice
Я открыт для того, что вы говорите, но наш проект запрещает использование сторонних инструментов (например, Spring) для основного проекта (для проверки его штрафа). Я не в состоянии бороться с политикой своей компании. Как бы вы DI с ситуацией, которую я настраивал, имея в виду, мне нужен только один экземпляр объекта CacheService в JVM? – Dave