Я изо всех сил пытаюсь научить себя Мокито.
Рассмотрим следующий метод, hasInventory () , который на самом деле не должен работать в моем мышлении, но настроен так, чтобы возвращать true или false как я беличья клетка мой тест. Класс Склад - это моя "насмешливая зависимость".
public class Warehouse implements IWarehouse
{
private Map< String, Integer > inventory;
public Warehouse()
{
this.inventory = new HashMap< String, Integer >();
}
public final boolean hasInventory( String itemname, int quantity )
throws InventoryDoesNotExistException
{
if( inventory == null )
throw new InventoryDoesNotExistException();
if( !inventory.containsKey( itemname ) )
return false;
int current = ( inventory.containsKey( itemname ) ) ? inventory.get( itemname ) : 0;
return( current >= quantity );
}
...
В тестовом коде JUnit первый when () выдает исключение, потому что он буквально интерпретирует вызов метода (выполняет его), а инвентаризация равна нулю (см. Выше), InventoryDoesNotExistException выбрасывается. В классе mocked-зависимостей есть и другие методы, такие как add () и remove () .
@RunWith( MockitoJUnitRunner.class )
public class OrderInteractionTest
{
private static final String TALISKER = "Talisker";
private Order systemUnderTest = null;
@Mock
private Warehouse mockedDependency = null;
@Before
public void init()
{
//MockitoAnnotations.initMocks( this );
//mockedDependency = mock( Warehouse.class );
this.systemUnderTest = new Order( TALISKER, 50 );
}
@Test
public void testFillingRemovesInventoryIfInStock()
{
try
{
doNothing().doThrow( new RuntimeException() ).when( mockedDependency ).add( anyString(), anyInt() );
doNothing().doThrow( new RuntimeException() ).when( mockedDependency ).remove( anyString(), anyInt() );
when( mockedDependency.hasInventory( anyString(), anyInt() ) ).thenReturn( true );
when( mockedDependency.getInventory( anyString() ) ).thenReturn( 50 );
Насколько я понимаю, методом when () я прошу Mockito точно не вызывать hasInventory () , а просто вернуть true вместо этого всякий раз, когда он вызывается, когда я тестирую класс ("systemUnderTest"). Может ли кто-нибудь помочь мне преодолеть этот пункт (или проникнуть в мои мысли)?
Я связываю mockito-all-1.8.5.jar и JUnit 4.
Большое спасибо всем, кто читает это.
Russ