Testing standards
Although some old tests does not (but will be refactored accordingly), all new tests should respect the following guidelines:
The retained test technology stack in AgE is:
You are strongly adviced to learn these libraries, if don't already know them. (seriously, they rock!)
Additionally, all tests should follow the Behavior Driven Development style of writing tests, using //given //when //then comments as fundamental parts of their methods.
Here is a best practice example of writing such tests:
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
import static org.mockito.BDDMockito.given;
import static org.mockito.Mockito.mock;
import org.jage.population.IPopulation;
import org.jage.solution.ISolution;
import org.jage.variation.mutation.IMutatePopulation;
import org.jage.variation.recombination.IRecombinePopulation;
/**
* Tests for VariationOperator.
*
* @author AGH AgE Team
*/
@RunWith(MockitoJUnitRunner.class)
public class VariationOperatorTest {
@Mock
private IRecombinePopulation<ISolution> recombine;
@Mock
private IMutatePopulation<ISolution> mutate;
@InjectMocks
private VariationOperator<ISolution> operator = new VariationOperator<ISolution>();
@Test
public void shouldTransformPopulation() {
// given
IPopulation<ISolution> originalPopulation = mock(IPopulation.class);
IPopulation<ISolution> recombinedPopulation = mock(IPopulation.class);
IPopulation<ISolution> mutatedPopulation = mock(IPopulation.class);
given(recombine.recombinePopulation(originalPopulation)).willReturn(recombinedPopulation);
given(mutate.mutatePopulation(recombinedPopulation)).willReturn(mutatedPopulation);
// when
IPopulation<ISolution> transformedPopulation = operator.transformPopulation(originalPopulation);
// then
assertThat(transformedPopulation, is(equalTo(mutatedPopulation)));
}
}