2016-09-13 13 views
-3

このコードのテストケースを作成しています。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); 
    } 
} 

}

+2

問題の詳細を教えてください。 – ChiefTwoPencils

答えて

1

あなたはここにからかっ必要はありません。

あなたのCUT(テスト中のクラス)は非常に明確なセマンティクスを持っています。基本的にはのガイドをテストケースに書き込むことができます。あなたがしなければならないこと:キャッシュクラスのオブジェクトを作成する。そのメソッドを使用して変更します。確認のためにアサートします。

例:

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

}(あなたは、パッケージで保護された方法として、その1を追加することができ、のisEmpty()を持って、まだいけない場合には、ちょうどそのようなテストを可能にするために)

次に、他のテストを行います。たとえば、特定のキャッシュキーを追加することが実際にあなたが望むことを実行することを確認します。

したがって、プライマリここで理解できること:正確に何をしているのかわからなくても、テストできるようにキャッシュ全体を設計する必要があります。

もちろん、模擬 ConcurrentHashMapオブジェクトを作成し、これをクラスに渡すことができます。実際に何らかの操作が行われると予想されるコールが実際に発生していることを確認します。しかし、それは実装の詳細をテストすることを意味します。それを避けたい場合は可能です。

あなたのフィールドdefaultCacheは、表示しているコードに意味をなさない。最初はnullで、セッターはありません。だからそれは絶対にいいえ目的を持っています。

関連する問題