Я столкнулся со странной проблемой. В моих тестовых примерах есть два неудачных теста, первый и третий. Однако, если я запускаю то же самое по отдельности, он работает отлично. Я новичок в JUnit и понятия не имею, почему это могло произойти. Я пытался повторно использовать моки и инициализировать их в методе setUp (), но это не помогло. Есть ли проблемы с кешем stati c?
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import static org.junit.jupiter.api.Assertions.*;
class CharCounterTest {
private CharCounter charCounter;
private CharCounter spyCharCounter;
@BeforeEach
public void setUp() {
charCounter = new CharCounter();
spyCharCounter = Mockito.spy(charCounter);
}
@AfterEach
public void cleanUp(){
Mockito.reset(spyCharCounter);
}
@Test
void given3IdenticalInputs_whenGetCharacterFrequency_thenPutInputInCacheOnce() {
//CharCounter charCounter = Mockito.spy(new CharCounter());
spyCharCounter.getCharacterFrequency("hello world!");
spyCharCounter.getCharacterFrequency("hello world!");
spyCharCounter.getCharacterFrequency("hello world!");
Mockito.verify(spyCharCounter, Mockito.times(1)).countCharacters("hello world!");
}
@Test
void given3DiffrentsInputs_whenGetCharacterFrequency_thenPutInputInCacheThrice() {
//CharCounter charCounter = Mockito.spy(new CharCounter());
spyCharCounter.getCharacterFrequency("hello world!");
spyCharCounter.getCharacterFrequency("hello!");
spyCharCounter.getCharacterFrequency("world!");
Mockito.verify(spyCharCounter, Mockito.times(1)).countCharacters("hello world!");
Mockito.verify(spyCharCounter, Mockito.times(1)).countCharacters("hello!");
Mockito.verify(spyCharCounter, Mockito.times(1)).countCharacters("world!");
}
@Test
void given2IdenticalAnd1DiffrentInputs_whenGetCharacterFrequency_thenPutInputInCacheTwice() {
//CharCounter charCounter = Mockito.spy(new CharCounter());
spyCharCounter.getCharacterFrequency("hello world!");
spyCharCounter.getCharacterFrequency("hello world!");
spyCharCounter.getCharacterFrequency("world!");
Mockito.verify(spyCharCounter, Mockito.times(1)).countCharacters("hello world!");
Mockito.verify(spyCharCounter, Mockito.times(1)).countCharacters("world!");
}
}```
/*There's a CharCounter class, maybe there is some problems with static cache?
*/
```public class CharCounter {
private static final CacheDecorator cache = new CacheDecorator(new LinkedHashMap<>());
public Map<String, Long> getCharacterFrequency(String text) {
Map<String, Long> characterFrequency;
if (cache.containsKey(text)) {
characterFrequency = cache.getData(text);
} else {
characterFrequency = countCharacters(text);
cache.putData(text, characterFrequency);
}
return characterFrequency;
}
public Map<String, Long> countCharacters(String text) {
Map<String, Long> frequencies = Arrays.stream(text.split(""))
.collect(Collectors.groupingBy(Function.identity(), LinkedHashMap::new, Collectors.counting()));
return frequencies;
}
}```