blob: 87b400c48e363bcaf10218d39a302b6e2c052a45 [file] [log] [blame]
/*
* Copyright (c) 2007 Mockito contributors
* This program is made available under the terms of the MIT License.
*/
package org.mockitousage.examples.use;
import org.junit.Rule;
import org.junit.Test;
import org.mockito.InOrder;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;
import java.util.Arrays;
import static org.mockito.Mockito.*;
public class ExampleTest {
@Rule public MockitoRule rule = MockitoJUnit.rule();
@Mock private ArticleCalculator mockCalculator;
@Mock private ArticleDatabase mockDatabase;
@InjectMocks private ArticleManager articleManager;
@Test
public void managerCountsArticlesAndSavesThemInTheDatabase() {
when(mockCalculator.countArticles("Guardian")).thenReturn(12);
when(mockCalculator.countArticlesInPolish(anyString())).thenReturn(5);
articleManager.updateArticleCounters("Guardian");
verify(mockDatabase).updateNumberOfArticles("Guardian", 12);
verify(mockDatabase).updateNumberOfPolishArticles("Guardian", 5);
verify(mockDatabase).updateNumberOfEnglishArticles("Guardian", 7);
}
@Test
public void managerCountsArticlesUsingCalculator() {
articleManager.updateArticleCounters("Guardian");
verify(mockCalculator).countArticles("Guardian");
verify(mockCalculator).countArticlesInPolish("Guardian");
}
@Test
public void managerSavesArticlesInTheDatabase() {
articleManager.updateArticleCounters("Guardian");
verify(mockDatabase).updateNumberOfArticles("Guardian", 0);
verify(mockDatabase).updateNumberOfPolishArticles("Guardian", 0);
verify(mockDatabase).updateNumberOfEnglishArticles("Guardian", 0);
}
@Test
public void managerUpdatesNumberOfRelatedArticles() {
Article articleOne = new Article();
Article articleTwo = new Article();
Article articleThree = new Article();
when(mockCalculator.countNumberOfRelatedArticles(articleOne)).thenReturn(1);
when(mockCalculator.countNumberOfRelatedArticles(articleTwo)).thenReturn(12);
when(mockCalculator.countNumberOfRelatedArticles(articleThree)).thenReturn(0);
when(mockDatabase.getArticlesFor("Guardian")).thenReturn(Arrays.asList(articleOne, articleTwo, articleThree));
articleManager.updateRelatedArticlesCounters("Guardian");
verify(mockDatabase).save(articleOne);
verify(mockDatabase).save(articleTwo);
verify(mockDatabase).save(articleThree);
}
@Test
public void shouldPersistRecalculatedArticle() {
Article articleOne = new Article();
Article articleTwo = new Article();
when(mockCalculator.countNumberOfRelatedArticles(articleOne)).thenReturn(1);
when(mockCalculator.countNumberOfRelatedArticles(articleTwo)).thenReturn(12);
when(mockDatabase.getArticlesFor("Guardian")).thenReturn(Arrays.asList(articleOne, articleTwo));
articleManager.updateRelatedArticlesCounters("Guardian");
InOrder inOrder = inOrder(mockDatabase, mockCalculator);
inOrder.verify(mockCalculator).countNumberOfRelatedArticles((Article) anyObject());
inOrder.verify(mockDatabase, atLeastOnce()).save((Article) anyObject());
}
}