के साथ net.sf.ehcache.Cache (ehcache) मॉकिंग IHCache के साथ एक सरल कैश कार्यक्षमता विकसित कर रहा हूं। वहाँ एक सामान्य आधार वर्ग को लागू करने वाली अपने कैश इंटरफेस (BECache) है:.put विधि stub (मॉकिटो)
public class ObjectCache extends EhCacheBase<String, Object>{
public ObjectCache (String cacheName) {
super(cacheName);
}
}
'cacheName' मानते हुए ehcache.xml में परिभाषित किया गया है:
public class EhCacheBase<K, V> implements BECache<K, V> {
private static CacheManager cacheManager;
private String cacheName;
public EhCacheBase(String cacheName) {
this.cacheName = cacheName;
}
public void cache(K key, V value) {
Cache cache = cacheManager.getCache(cacheName);
if (cache == null) {
throw new NullPointerException("Failed to obtain cache: " + cacheName);
}
Element element = new Element(key, value);
cache.put(element);
}
उद्देश्य इस प्रकार के रूप में परिभाषित कैश है मुझे कुछ वस्तुओं को कैशिंग के लिए एक अच्छी कक्षा मिलती है।
मैं 'EhCacheBase.cache (...)' विधि है कि एक कैश लिया गया है सुनिश्चित करता है और एक मूल्य डाल दिया जाता है (Mockito का प्रयोग करके) के लिए एक परीक्षण लिखने के लिए कोशिश कर रहा हूँ:
private static final String CACHE_NAME = "testCache";
@Mock
private CacheManager cacheManager;
@Mock
private Cache cache;
private EhCacheBase<String, Object> ehCacheBase;
@Before
public void init() {
MockitoAnnotations.initMocks(this);
ehCacheBase = new EhCacheBase<String, Object>(CACHE_NAME);
EhCacheBase.setCacheManager(cacheManager);
}
@Test
public void shouldRetrieveCacheAndPutOneValueInIt() {
//given
Object o = new Object();
when(cacheManager.getCache(CACHE_NAME)).thenReturn(cache);
//when
ehCacheBase.cache("KEY", o);
//then
verify(cacheManager, times(1)).getCache(CACHE_NAME);
verify(cache, times(1)).put(any(Element.class));
}
जब
java.lang.NullPointerException
at net.sf.ehcache.Cache.checkStatus(Cache.java:2731)
at net.sf.ehcache.Cache.putInternal(Cache.java:1440)
at net.sf.ehcache.Cache.put(Cache.java:1417)
at net.sf.ehcache.Cache.put(Cache.java:1382)
at org.fxoo.bookingengine.dao.dataproviders.caches.EhCacheBase.cache(EhCacheBase.java:24)
at org.fxoo.bookingengine.dao.dataproviders.caches.EhCacheBaseTest.shouldCacheOneValue(EhCacheBaseTest.java:41)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:35)
at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:115)
at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:97)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.maven.surefire.booter.ProviderFactory$ClassLoaderProxy.invoke(ProviderFactory.java:103)
at $Proxy0.invoke(Unknown Source)
at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:150)
at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcess(SurefireStarter.java:91)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:69)
यह 'कैश' नकली 'में डाल' विधि की तरह लगता है कुछ अन्य लोगों के तरीकों बुला रहा है: मैं परीक्षण मैं चलाते हैं। लेकिन जैसा कि आप मॉकिटो डॉक्स में पढ़ सकते हैं:
कुछ भी करने के लिए शून्य विधियों को सेट करने के लिए doNothing() का उपयोग करें। सावधान रहें कि मोक्स पर शून्य विधियां डिफ़ॉल्ट रूप से कुछ भी नहीं करती हैं! हालांकि, कुछ भी नहीं होती है जब कुछ भी नहीं होता है (
वैसे, मैंने कोशिश की: कुछ भी नहीं()। जब (कैश) .पुट (कोई (Element.class)); और इससे कोई मदद नहीं मिली।
कोई विचार क्या चल रहा है?
क्योंकि पुट (तत्व) अंतिम है, यह मजाक एक मुद्दा है:
मैं स्वीकार किए जाते हैं जवाब के उदाहरण अनुकूल नहीं बनाया है। – Zlatko