package com.fernandocejas.testing.test.sample.junit.model;
import com.fernandocejas.testing.sample.junit.model.Car;
import com.fernandocejas.testing.sample.junit.model.Engine;
import com.fernandocejas.testing.sample.junit.model.EngineV8;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import static org.hamcrest.CoreMatchers.instanceOf;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.sameInstance;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.fail;
import static org.mockito.BDDMockito.given;
import static org.mockito.Mockito.atLeast;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
/**
* @author: Fernando Cejas <fcejas@gmail.com>
* android10.org
*/
public class CarTest {
private Car car;
private Engine mockEngine;
@Before
public void executeBeforeEachTest() {
mockEngine = mock(Engine.class);
car = new Car(mockEngine);
}
@Ignore
public void testIgnored() {
assertThat(true, is(true));
}
@Ignore
public void testFail() {
fail("This a fail testing due to...");
}
@Test
public void testGoingForward() {
car.setFuel(100);
car.moveForward(10);
int actualKilometers = car.getKilometers();
assertThat(actualKilometers, is(10));
}
@Test (expected = UnsupportedOperationException.class)
public void testGoingForwardWithoutFuel() {
car.moveForward(100);
}
@Test
public void testFuel() {
car = new Car(mockEngine, 10);
int actualFuel = car.getFuel();
assertThat(actualFuel, is(10));
verifyNoMoreInteractions(mockEngine);
}
@Test
public void testFuelConsumption() {
given(mockEngine.getFuelConsumptionPerKm()).willReturn(1);
car = new Car(mockEngine, 100);
car.moveForward(10);
int actualFuel = car.getFuel();
assertThat(actualFuel, is(90));
verify(mockEngine, atLeast(1)).getFuelConsumptionPerKm();
verifyNoMoreInteractions(mockEngine);
}
@Test
public void testCarWithEngineV8() {
mockEngine = mock(EngineV8.class);
car = new Car(mockEngine);
Engine actualEngine = car.getEngine();
assertThat(actualEngine, is(instanceOf(EngineV8.class)));
assertThat(actualEngine, is(sameInstance(mockEngine)));
}
}