Junit测试用例

时间:2016-09-13 07:21:55

标签: java maven junit

我正在编写此代码的测试用例。

但是我无法为此编写junit测试用例。我有问题为此编写junit测试用例。

请为此编写mockito或junit测试用例。

public class BasicCacheManager implements CacheManager {
private ConcurrentHashMap<String, BasicCache> cacheMap;
private String defaultCache;

public BasicCacheManager() {
    this.cacheMap = new ConcurrentHashMap<String, BasicCache>();
}

public BasicCacheManager(List<String> cacheNames) {
    this.cacheMap = new ConcurrentHashMap<String, BasicCache>();
    addCache(cacheNames);
}

@Override 
public BasicCache getCache(){
    return getCache(defaultCache);
}

@Override 
public BasicCache getCache(String name) {
    return cacheMap.get(name);
};

@Override 
public void addCache(BasicCache cache) {
    cacheMap.put(cache.getName(), cache);
};

@Override 
public void removeCache(String name) {
    cacheMap.remove(name);
};

@Override 
public void removeAll() {
    cacheMap = new ConcurrentHashMap<String, BasicCache>();
};

@Override 
public boolean cacheExists(String name) {
    return cacheMap.containsKey(name);
};

@Override 
public void removeElement(String cacheName, String element){
    BasicCache cache = getCache(cacheName);
    if(cache != null){
        cache.remove(element);
    }
}

// added final to avoid any child classes from overriding this method
private final void addCache(List<String> cacheNames) {
    for (String cacheName : cacheNames) {
        BasicCache cache = new BasicCache(cacheName);
        addCache(cache);
    }
}

}

1 个答案:

答案 0 :(得分:1)

你不需要在这里嘲笑。

你的CUT(被测试的类)具有非常明确的语义;和基本指导你编写测试用例的接口。你需要做的是:创建缓存类的对象;然后使用它的方法来修改它;并断言要验证。

示例:

@Test
public void testNewCacheIsEmpty() {
  BasicCache underTest = new BasicCache();
  assertThat(underTest.isEmpty(), is(true));

}

(如果你还没有isEmpty(),你可以将它添加为受包保护的方法;只是为了允许这样的测试)。

然后你写其他测试;例如,确保添加某个缓存键...实际上做了你期望的事情。

所以,主要在这里要理解:您应该设计整个缓存,以便可以测试它...而不知道它到底在做什么。

当然,你可以创建一个模拟的 ConcurrentHashMap对象并将其传递给你的类;验证确实发生了某些操作所期望的那些调用。但这意味着:测试实施细节。如果可能的话,你想避免这种情况。

仅供记录:您的字段 defaultCache 在您显示的代码中没有任何意义。它最初为null,没有setter;所以它绝对没有没有目的。