Skip to content

Framework EasyMock

Damian Muszyński edited this page Apr 19, 2021 · 3 revisions

Framework EasyMock

EasyMock to oparty na Javie framework do tworzenia makiet, który jest używany w połączeniu z innymi bibliotekami do testowania jednostkowego, takimi jak JUnit i TestNG. EasyMock jest bardzo podobny do frameworka do mockowania Mockito.

EasyMock pozwala nam tworzyć pozorowane obiekty interfejsów i konkretnych klas oraz określać ich zachowania. Następnie możemy użyć tych makiet do napisania kodu do testowania naszych głównych klas. W ten sposób pisanie testów jednostkowych jest uproszczone, ponieważ nie musimy przejmować się zewnętrznymi zależnościami.

EasyMock ułatwia płynne tworzenie pozorowanych obiektów. Używa Java Reflection do tworzenia pozorowanych obiektów dla danego interfejsu. Obiekty pozorowane to nic innego jak proxy dla rzeczywistych implementacji.

Cechy frameworka testowego JUnit:

  • Obsługuje adnotacje.
  • Obsługuje wyjątki.
  • Mockowanie klas i interfejsów. Jedno api dla obu przpadków.
  • EasyMock nie pozwala na "szpiegowanie" obiektów.
  • Przejrzystość, prostota i mała ilość kodu potrzebna do utworzenia. Obiekt można wykorzystać zaraz po stworzeniu o ile nie zawiera większej logiki. Metody są wywoływane nie powodując błędu, nic nie robią.
  • W przypadkach gdy musimy utworzyć sporo obiektów zależnych lub kod musi się wykonać w odpowiednim środowisku(połączenie z bazą danych), oznacza szybsze wykonanie się samego testu,

Podstawowe adnotacje w EasyMock:

Adnotacja Opis
@Mock Służy do określenia pola, które ma być mockowane przez EasyMock.
@TestSubject Służy do określenia obiektu, do którego chcemy, aby EasyMock wstrzyknął mockowane obiekty utworzone za pomocą adnotacji @Mock.
@RunWith(EasyMockRunner.class) Służy do jawnego zainicjowania używania framework'u EasyMock i jego adnotacji.

Przykładowy prosty zestaw testów może wyglądać następująco:

import static org.easymock.EasyMock.*;
import static org.junit.jupiter.api.Assertions.*;

import org.easymock.EasyMockSupport;
import org.easymock.Mock;
import org.easymock.TestSubject;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import com.journaldev.utils.Calculator;
import com.journaldev.utils.MathUtils;

public class EasyMockAnnotationExample {

	@Mock
	private Calculator mockCalculator;

	@TestSubject
	private MathUtils mathUtils = new MathUtils(mockCalculator);

	@BeforeEach
	public void setup() {
		EasyMockSupport.injectMocks(this);
	}

	@Test
	public void test() {
		expect(mockCalculator.add(1, 1)).andReturn(2);
		expect(mockCalculator.multiply(10, 10)).andReturn(100);
		replay(mockCalculator);

		assertEquals(mathUtils.add(1, 1), 2);
		assertEquals(mathUtils.multiply(10, 10), 100);
	}
}