AgE 2.4 : Testing standards

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)));
	}
}