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

Статический метод EasyMock – PowerMock, JUnit 4, тестирование

Одним из ограничений EasyMock является то, что он не может имитировать статические методы. Однако мы можем использовать расширение PowerMock EasyMock для моделирования статических методов. 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(Utils.class) . Это должно быть сделано на уровне класса, и мы можем использовать его полные имена для указания нескольких классов и пакетов.
  • В методе тестирования используйте PowerMock.mockStatic() метод для моделирования статических методов класса.
  • Заглушите поведение с помощью метода EasyMock.expect () .
  • Поскольку у нас нет макетного объекта, используйте PowerMock.replayAll() для завершения настройки.
  • Используйте утверждения для проверки поведения.
  • Используйте PowerMock.VerifyAll () , чтобы убедиться, что все заглушенные методы были вызваны.

Допустим, у нас есть служебный класс, как:

class Utils {

	public static long generateID() {
		return System.currentTimeMillis();
	}
}

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

package com.journaldev.easymock.powermock.staticmethod;

import static org.easymock.EasyMock.*;
import static org.junit.Assert.assertEquals;

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.*;

@RunWith(PowerMockRunner.class)
@PrepareForTest(Utils.class)
public class JUnit4PowerMockEasyMockStaticExample {

	@Test
	public void test_static_method() {
		//PowerMock.mockStatic()
		mockStatic(Utils.class);
		
		expect(Utils.generateID()).andReturn(1000L);
		
		//PowerMock.replayAll()
		replayAll();
		
		assertEquals(1000L, Utils.generateID());
		//PowerMock.verifyAll()
		verifyAll();
	}
}

Пример статического метода TestNG PowerMock EasyMock

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

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

package com.journaldev.easymock.powermock.staticmethod;

import static org.easymock.EasyMock.*;

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;

@PrepareForTest(Utils1.class)
public class TestNGPowerMockEasyMockStaticExample extends PowerMockTestCase{

	@Test
	public void test_static_method() {
		//PowerMock.mockStatic()
		mockStatic(Utils1.class);
		
		expect(Utils1.generateID()).andReturn(1000L);
		
		//PowerMock.replayAll()
		replayAll();
		
		assertEquals(1000L, Utils1.generateID());
		//PowerMock.verifyAll()
		verifyAll();
	}
}
class Utils1 {

	public static long generateID() {
		return System.currentTimeMillis();
	}
}

Резюме

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