BDDMockito
Date: 2015-09-18

org.mockito

## Class BDDMockito

- java.lang.Object
- - org.mockito.Matchers
  - - org.mockito.Mockito
    - - org.mockito.BDDMockito

-     public class BDDMockito
      extends Mockito

  Behavior Driven Development style of writing tests uses //given //when //then comments as fundamental parts of your test methods. This is exactly how we write our tests and we warmly encourage you to do so!

  Start learning about BDD here: http://en.wikipedia.org/wiki/Behavior_Driven_Development

  The problem is that current stubbing api with canonical role of when word does not integrate nicely with //given //when //then comments. It's because stubbing belongs to given component of the test and not to the when component of the test. Hence `BDDMockito` class introduces an alias so that you stub method calls with `given(Object)` method. Now it really nicely integrates with the given component of a BDD style test!

  Here is how the test might look like:

       import static org.mockito.BDDMockito.*;

       Seller seller = mock(Seller.class);
       Shop shop = new Shop(seller);

       public void shouldBuyBread() throws Exception {
         //given
         given(seller.askForBread()).willReturn(new Bread());

         //when
         Goods goods = shop.buyBread();

         //then
         assertThat(goods, containBread());
       }

  Stubbing voids with throwables:

         //given
         willThrow(new RuntimeException("boo")).given(mock).foo();

         //when
         Result result = systemUnderTest.perform();

         //then
         assertEquals(failure, result);

  For BDD style mock verification take a look at `BDDMockito.Then` in action:

         person.ride(bike);
         person.ride(bike);

         then(person).should(times(2)).ride(bike);

  One of the purposes of BDDMockito is also to show how to tailor the mocking syntax to a different programming style.
  Since:
    1.8.0

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `static interface` | `BDDMockito.BDDMyOngoingStubbing<T>` See original `OngoingStubbing`
    `static class` | `BDDMockito.BDDOngoingStubbingImpl<T>` Deprecated. not part of the public API, use `BDDMockito.BDDMyOngoingStubbing` instead.
    `static interface` | `BDDMockito.BDDStubber` See original `Stubber`
    `static class` | `BDDMockito.BDDStubberImpl` Deprecated. not part of the public API, use `BDDMockito.BDDStubber` instead.
    `static interface` | `BDDMockito.Then<T>` Provides fluent way of mock verification.

  - ### Field Summary

    - ### Fields inherited from class org.mockito.Mockito

      `CALLS_REAL_METHODS, RETURNS_DEEP_STUBS, RETURNS_DEFAULTS, RETURNS_MOCKS, RETURNS_SMART_NULLS`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `BDDMockito()`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `static <T> BDDMockito.BDDMyOngoingStubbing<T>` | `given(T methodCall)` see original `Mockito.when(Object)`
    `static <T> BDDMockito.Then<T>` | `then(T mock)` Bdd style verification of mock behavior.
    `static BDDMockito.BDDStubber` | `willAnswer(Answer answer)` see original `Mockito.doAnswer(Answer)`
    `static BDDMockito.BDDStubber` | `willCallRealMethod()` see original `Mockito.doCallRealMethod()`
    `static BDDMockito.BDDStubber` | `willDoNothing()` see original `Mockito.doNothing()`
    `static BDDMockito.BDDStubber` | `willReturn(java.lang.Object toBeReturned)` see original `Mockito.doReturn(Object)`
    `static BDDMockito.BDDStubber` | `willThrow(java.lang.Class<? extends java.lang.Throwable> toBeThrown)` see original `Mockito.doThrow(Throwable)`
    `static BDDMockito.BDDStubber` | `willThrow(java.lang.Throwable toBeThrown)` see original `Mockito.doThrow(Throwable)`

    - ### Methods inherited from class org.mockito.Mockito

      `after, atLeast, atLeastOnce, atMost, calls, doAnswer, doCallRealMethod, doNothing, doReturn, doThrow, doThrow, ignoreStubs, inOrder, mock, mock, mock, mock, mock, mockingDetails, never, only, reset, spy, spy, stub, stubVoid, timeout, times, validateMockitoUsage, verify, verify, verifyNoMoreInteractions, verifyZeroInteractions, when, withSettings`

    - ### Methods inherited from class org.mockito.Matchers

      `any, any, anyBoolean, anyByte, anyChar, anyCollection, anyCollectionOf, anyDouble, anyFloat, anyInt, anyList, anyListOf, anyLong, anyMap, anyMapOf, anyObject, anySet, anySetOf, anyShort, anyString, anyVararg, argThat, booleanThat, byteThat, charThat, contains, doubleThat, endsWith, eq, eq, eq, eq, eq, eq, eq, eq, eq, floatThat, intThat, isA, isNotNull, isNotNull, isNull, isNull, longThat, matches, notNull, notNull, refEq, same, shortThat, startsWith`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### BDDMockito

          public BDDMockito()

  - ### Method Detail

    - #### given

          public static <T> BDDMockito.BDDMyOngoingStubbing<T> given(T methodCall)

      see original `Mockito.when(Object)`
      Since:
        1.8.0

    - #### then

          public static <T> BDDMockito.Then<T> then(T mock)

      Bdd style verification of mock behavior.

             person.ride(bike);
             person.ride(bike);

             then(person).should(times(2)).ride(bike);

      Since:
        1.10.0
      See Also:
        `Mockito.verify(Object)`, `Mockito.verify(Object, VerificationMode)`

    - #### willThrow

          public static BDDMockito.BDDStubber willThrow(java.lang.Throwable toBeThrown)

      see original `Mockito.doThrow(Throwable)`
      Since:
        1.8.0

    - #### willThrow

          public static BDDMockito.BDDStubber willThrow(java.lang.Class<? extends java.lang.Throwable> toBeThrown)

      see original `Mockito.doThrow(Throwable)`
      Since:
        1.9.0

    - #### willAnswer

          public static BDDMockito.BDDStubber willAnswer(Answer answer)

      see original `Mockito.doAnswer(Answer)`
      Since:
        1.8.0

    - #### willDoNothing

          public static BDDMockito.BDDStubber willDoNothing()

      see original `Mockito.doNothing()`
      Since:
        1.8.0

    - #### willReturn

          public static BDDMockito.BDDStubber willReturn(java.lang.Object toBeReturned)

      see original `Mockito.doReturn(Object)`
      Since:
        1.8.0

    - #### willCallRealMethod

          public static BDDMockito.BDDStubber willCallRealMethod()

      see original `Mockito.doCallRealMethod()`
      Since:
        1.8.0