Как протестировать проект Maven с помощью EasyMock?
Всегда программный проект готовится и тестируется как отдельная единица. Мы передаем разные сценарии и ожидаем, что исходные значения должны совпадать. Одним из таких подходов является «Easymock», и в этой статье в примере проекта рассматривается, когда и как имитировать методы void. Мы собираемся увидеть этот подход через проект maven. Следовательно, необходимо добавить зависимости в pom.xml.
<dependency>
<groupId>org.easymock</groupId>
<artifactId>easymock</artifactId>
<version>4.0.2</version>
<scope>test</scope>
</dependency>пустой метод:
Обычно методы имеют тенденцию возвращать значение, и тестирование можно выполнить, передав значение и ожидая, что метод вернет это значение или нет. Если методы ничего не возвращают, то они называются недействительными методами, и в этих случаях основным фактором является то, требуется ли тестирование или нет. Но по сути требуется, как бы метод ничего не возвращал, в случае с Session.save() он создает новый ID в системе. Во время таких сценариев мы можем имитировать и тестировать зависимости. Прежде чем перейти к программам, давайте посмотрим на структуру проекта.
Начнем с pom.xml, который содержит все зависимости, необходимые для проекта.
Пример проекта Maven
пом.xml
XML
<?xml version="1.0" encoding="UTF-8"?> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 <modelVersion>4.0.0</modelVersion> <artifactId>easymock</artifactId> <name>easymock</name> <parent> <groupId>com.gfg</groupId> <artifactId>testing-modules</artifactId> <version>1.0.0-SNAPSHOT</version> </parent> <dependencies> <dependency> <groupId>org.easymock</groupId> <artifactId>easymock</artifactId> <version>${easymock.version}</version> <scope>test</scope> </dependency> </dependencies> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> <easymock.version>4.0.2</easymock.version> </properties> </project> |
Смоделируйте метод void или метод, который возвращает допустимый тип данных, и он должен быть доступен в интерфейсе.
Java
public interface WeatherServiceInterface { public BigDecimal getLocationTemperature(GeoLocation geoLocation) ;} |
Если мы имитируем метод void, для возврата успеха необходимо указать значение return null . В противном случае, согласно возвращенному, мы можем это сделать. Полный код остальных java-файлов приведен ниже.
GeoLocation.java
Java
import java.math.BigDecimal; public class GeoLocation { private String locationName; private BigDecimal minTemperature; private BigDecimal maxTemperature; @Override public String toString() { return "GeoLocation [locationName=" + locationName + ", minTemperature=" + minTemperature + ", maxTemperature=" + maxTemperature + "]"; } public GeoLocation(String locationName, BigDecimal minTemperature, BigDecimal maxTemperature) { this.locationName = locationName; this.minTemperature = minTemperature; this.maxTemperature = maxTemperature; } public String getLocationName() { return locationName; } public void setLocationName(String locationName) { this.locationName = locationName; } public BigDecimal getMinTemperature() { return minTemperature; } public void setMinTemperature(BigDecimal minTemperature) { this.minTemperature = minTemperature; } public BigDecimal getMaxTemperature() { return maxTemperature; } public void setMaxTemperature(BigDecimal maxTemperature) { this.maxTemperature = maxTemperature; } public GeoLocation(String locationName) { this.locationName = locationName; } } |
WeatherServiceInterface.java
Java
import java.math.BigDecimal; public interface WeatherServiceInterface { public BigDecimal getLocationTemperature(GeoLocation geoLocation); } |
WeatherForecastProcessor.java
Java
import java.math.BigDecimal; public class WeatherForecastProcessor { private WeatherServiceInterface weatherService; public BigDecimal getMaximumTemperature(GeoLocation location) { BigDecimal temperature = null; temperature = weatherService.getLocationTemperature(location); return temperature; } public WeatherServiceInterface getWeatherService() { return weatherService; } public void setWeatherService(WeatherServiceInterface weatherService) { this.weatherService = weatherService; } } |
WeatherServiceUnavailableException.java
Java
public class WeatherServiceUnavailableException extends Exception { private static final long serialVersionUID = 6961151537340723535L;} |
Тестовый файл
WeatherForecastProcessorUnitTest.java
Java
package com.gfg.easymocktesting; import java.math.BigDecimal;import org.easymock.EasyMock;import org.junit.jupiter.api.Test;import junit.framework.TestCase; public class WeatherForecastProcessorUnitTest extends TestCase { private com.gfg.easymocktesting.WeatherForecastProcessor weatherForecastProcessor; private com.gfg.easymocktesting.WeatherServiceInterface mockWeatherServiceInterface; com.gfg.easymocktesting.GeoLocation location; BigDecimal temperature; @Test public void testGetMaximumTemperature() { weatherForecastProcessor = new WeatherForecastProcessor(); mockWeatherServiceInterface = EasyMock.createMock(WeatherServiceInterface.class); location = new GeoLocation("London", new BigDecimal(10.00), new BigDecimal(100.00)); weatherForecastProcessor.setWeatherService(mockWeatherServiceInterface); EasyMock.expect(mockWeatherServiceInterface.getLocationTemperature(location)).andReturn(temperature); EasyMock.replay(mockWeatherServiceInterface); }} |
Вывод выполнения JUnit Testcase
Вывод
На самом деле для имитации подключения к базе данных или свойств, полученных из файла, доступного локально или с сервера, не требуется. Easymock использовал концепцию отражения Java, и поэтому они использовали фиктивные объекты для данного интерфейса.