mockito
Mockito bästa metoder
Sök…
BDDMockito-stil
Behållningsdriven utvecklingstest (BDD) -testningsstil handlar om "givna", "när" och "sedan" stadier i tester. Klassisk Mockito använder emellertid "när" ord för "givet" fas och inkluderar inte andra naturliga språkkonstruktioner som kan omfatta BDD. Således infördes BDDMockito alias i version 1.8.0 för att underlätta beteendestyrda test.
Den vanligaste situationen är att stoppa avkastningen av en metod. I följande exempel getStudent(String)
-metoden i den hånade StudentRepository
new Student(givenName, givenScore)
om den anropas med ett argument som är lika med givenName
.
import static org.mockito.BDDMockito.*;
public class ScoreServiceTest {
private StudentRepository studentRepository = mock(StudentRepository.class);
private ScoreService objectUnderTest = new ScoreService(studentRepository);
@Test
public void shouldCalculateAndReturnScore() throws Exception {
//given
String givenName = "Johnny";
int givenScore = 10;
given(studentRepository.getStudent(givenName))
.willReturn(new Student(givenName, givenScore));
//when
String actualScore = objectUnderTest.calculateStudentScore(givenName);
//then
assertEquals(givenScore, actualScore);
}
}
Ibland är det önskvärt att kontrollera om undantag som kastas från beroendet är korrekt hanterat eller omväxlas i en metod som testas. Sådant beteende kan stoppas i "given" fas på detta sätt:
willThrow(new RuntimeException())).given(mock).getData();
Ibland är det önskvärt att skapa några biverkningar som en stubbmetod bör införa. Speciellt kan det vara praktiskt när:
den stoppade metoden är en metod som ska förändra det interna tillståndet för ett passerat objekt
den stoppade metoden är en ogiltig metod
Sådant beteende kan stoppas i en "given" fas med ett "svar":
willAnswer(invocation -> this.prepareData(invocation.getArguments()[0])).given(mock).processData();
När det är önskvärt att verifiera interaktioner med en håna, kan det göras i "då" -fasen med should()
eller should(VerificationMode)
(endast sedan 1.10.5) -metoder:
then(mock).should().getData(); // verifies that getData() was called once
then(mock).should(times(2)).processData(); // verifies that processData() was called twice
När det är önskvärt att verifiera att det inte fanns fler interaktioner med en håna utöver redan verifierad, kan det göras i "då" -fasen med shouldHaveNoMoreInteractions()
(sedan 2.0.0):
then(mock).shouldHaveNoMoreInteractions(); // analogue of verifyNoMoreInteractions(mock) in classical Mockito
När det är önskvärt att verifiera att det absolut inte fanns några interaktioner med en håna, kan det göras i "då" -fasen med shouldHaveNoMoreInteractions()
(sedan 2.0.0):
then(mock).shouldHaveZeroInteractions(); // analogue of verifyZeroInteractions(mock) in classical Mockito
När det är önskvärt att kontrollera om metoder har åberopats för att det kan göras i "då" -fasen med should(InOrder)
(sedan 1.10.5) och should(InOrder, VerificationMode)
(sedan 2.0.0):
InOrder inOrder = inOrder(mock);
// test body here
then(mock).should(inOrder).getData(); // the first invocation on the mock should be getData() invocation
then(mock).should(inOrder, times(2)).processData(); // the second and third invocations on the mock should be processData() invocations