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


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow