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