Рубрики
Без рубрики

Окончательный метод EasyMock – PowerMock, JUnit 4, TestNG

Окончательный метод EasyMock, Окончательный класс EasyMock, Макет окончательного метода EasyMock с использованием PowerMock, JUnit4, платформа тестирования TestNG, пример кода окончательного макета EasyMock

Автор оригинала: Pankaj Kumar.

Одним из ограничений EasyMock является то, что он не может имитировать конечные методы и конечные классы. Однако мы можем использовать расширение PowerMock EasyMock для моделирования статических методов.

Окончательный метод и класс EasyMock с использованием PowerMock

PowerMock разделен на несколько модулей для поддержки платформы тестирования JUnit и TestNG. Аналогичным образом, существуют модули для расширения фреймворков EasyMock и Mockito.

Я приведу пример для моделирования окончательного метода внутри конечного класса с использованием PowerMock как в рамках JUnit4, так и в рамках TestNG. Поэтому нам нужно импортировать следующие артефакты.

  • powermock-модуль-junit4
  • powermock-модуль-тестирование
  • powermock-api-easymock
  • junit, testng и easymock по очевидным причинам.

Я не использую JUnit 5, потому что PowerMock его еще не поддерживает. Я использую следующие версии для своих примеров.

4.12
6.14.3
2.0.0-beta.5
10
3.6

Пример окончательного метода JUnit PowerMock EasyMock

  • Первым шагом является аннотирование тестового класса с помощью @RunWith(PowerMockRunner.class) аннотация.
  • Следующий шаг-указать классы для подготовки к тестированию с помощью PowerMock, например @PrepareForTest(Data.class) . Это должно быть сделано на уровне класса, и мы можем использовать его полные имена для указания нескольких классов и пакетов.
  • В методе тестирования используйте PowerMock.createMock() метод для макетирования конечного класса.
  • Заглушите поведение с помощью метода EasyMock.expect () .
  • Используйте PowerMock.replay() для завершения настройки макета объекта и его поведения.
  • Используйте утверждения JUnit 4 для проверки поведения.
  • Используйте PowerMock.verify () , чтобы убедиться, что были вызваны все заглушенные конечные методы.

Допустим, у нас есть заключительный урок, как:

final class Data {
	final String reverse(String s) {
		return new StringBuffer(s).reverse().toString();
	}
}

Вот тест JUnit, чтобы поиздеваться над окончательным классом и его окончательным методом и протестировать его.

package com.journaldev.easymock.powermock.finalmethod;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import static org.powermock.api.easymock.PowerMock.*;
import static org.easymock.EasyMock.expect;
import static org.junit.Assert.assertEquals;
import static org.easymock.EasyMock.anyString;

@RunWith(PowerMockRunner.class)
@PrepareForTest(Data.class)
public class JUnit4PowerMockEasyMockFinalExample {

	@Test
	public void test_final_method_class() {
		//PowerMock.createMock()
		Data mock = createMock(Data.class);
		
		expect(mock.reverse("CAT")).andReturn("TAC");
		expect(mock.reverse(anyString())).andReturn("INVALID");
		
		//PowerMock.replay()
		replay(mock);
		
		assertEquals("TAC", mock.reverse("CAT"));
		assertEquals("INVALID", mock.reverse("Java"));
		
		//PowerMock.verify()
		verify(mock);
	}

}

Пример окончательного метода тестирования PowerMock EasyMock

Если вы хотите использовать TestNG вместо JUnit-4, убедитесь, что ваш тестовый класс расширяет PowerMockTestCase класс. Также удалите аннотацию @RunWith . Внесите необходимые изменения в другие аннотации и используйте методы утверждения TestNG.

Ниже класс использует тестирование вместе с PowerMock для моделирования конечных методов с помощью EasyMock.

package com.journaldev.easymock.powermock.finalmethod;

import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.testng.PowerMockTestCase;
import org.testng.annotations.Test;

import static org.powermock.api.easymock.PowerMock.*;
import static org.testng.Assert.assertEquals;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.anyString;

@PrepareForTest(Data1.class)
public class TestNGPowerMockEasyMockFinalExample extends PowerMockTestCase{

	@Test
	public void test_final_method_class() {
		//PowerMock.createMock()
		Data1 mock = createMock(Data1.class);
		
		expect(mock.reverse("CAT")).andReturn("TAC");
		expect(mock.reverse(anyString())).andReturn("INVALID");
		
		//PowerMock.replay()
		replay(mock);
		
		assertEquals("TAC", mock.reverse("CAT"));
		assertEquals("INVALID", mock.reverse("Java"));
		
		//PowerMock.verify()
		verify(mock);
	}

}

final class Data1 {
	final String reverse(String s) {
		return new StringBuffer(s).reverse().toString();
	}
}

Резюме

PowerMock – отличное расширение для фреймворков EasyMock и Mockito. Это помогает нам расширить наши тестовые примеры, чтобы охватить также конечные классы и конечные методы.