EasyMock — Обзор
Пересмешка — это способ проверить функциональность класса в отдельности. Для проверки работоспособности не требуется подключение к базе данных или чтение файла свойств или чтение файлового сервера. Поддельные объекты делают насмешку над реальным сервисом. Макет объекта возвращает фиктивные данные, соответствующие некоторому фиктивному вводу, переданному ему.
EasyMock
EasyMock позволяет легко создавать фиктивные объекты. Он использует Java Reflection для создания фиктивных объектов для данного интерфейса. Поддельные объекты — не что иное, как прокси для реальных реализаций. Рассмотрим случай с Stock Service, который возвращает информацию о цене акции. Во время разработки фактическая служба запаса не может быть использована для получения данных в реальном времени. Так что нам нужна фиктивная реализация стокового сервиса. EasyMock может сделать то же самое очень легко, как предполагает его название.
Преимущества EasyMock
-
Нет рукописного ввода — не нужно писать фиктивные объекты самостоятельно.
-
Рефакторинг Safe — переименование имен методов интерфейса или изменение порядка параметров не нарушит тестовый код, так как Mocks создаются во время выполнения.
-
Поддержка возвращаемых значений — Поддерживает возвращаемые значения.
-
Поддержка исключений — Поддерживает исключения.
-
Поддержка проверки заказа — Поддерживает проверку порядка вызовов методов.
-
Поддержка аннотаций — Поддерживает создание макетов с использованием аннотаций.
Нет рукописного ввода — не нужно писать фиктивные объекты самостоятельно.
Рефакторинг Safe — переименование имен методов интерфейса или изменение порядка параметров не нарушит тестовый код, так как Mocks создаются во время выполнения.
Поддержка возвращаемых значений — Поддерживает возвращаемые значения.
Поддержка исключений — Поддерживает исключения.
Поддержка проверки заказа — Поддерживает проверку порядка вызовов методов.
Поддержка аннотаций — Поддерживает создание макетов с использованием аннотаций.
Рассмотрим следующий фрагмент кода.
package com.tutorialspoint.mock; import java.util.ArrayList; import java.util.List; import org.EasyMock.EasyMock; public class PortfolioTester { public static void main(String[] args){ //Create a portfolio object which is to be tested Portfolio portfolio = new Portfolio(); //Creates a list of stocks to be added to the portfolio Liststocks = new ArrayList (); Stock googleStock = new Stock("1","Google", 10); Stock microsoftStock = new Stock("2","Microsoft",100); stocks.add(googleStock); stocks.add(microsoftStock); //Create the mock object of stock service StockService stockServiceMock = EasyMock.createMock(StockService.class); // mock the behavior of stock service to return the value of various stocks EasyMock.expect(stockServiceMock.getPrice(googleStock)).andReturn(50.00); EasyMock.expect(stockServiceMock.getPrice(microsoftStock)) .andReturn(1000.00); EasyMock.replay(stockServiceMock); //add stocks to the portfolio portfolio.setStocks(stocks); //set the stockService to the portfolio portfolio.setStockService(stockServiceMock); double marketValue = portfolio.getMarketValue(); //verify the market value to be //10*50.00 + 100* 1000.00 = 500.00 + 100000.00 = 100500 System.out.println("Market value of the portfolio: "+ marketValue); } }
Давайте разберемся с важными концепциями вышеуказанной программы. Полный код доступен в главе Первое применение.
-
Портфолио — объект для хранения списка акций и получения рыночной стоимости, рассчитанной с использованием цен акций и количества акций.
-
Запас — объект для переноса деталей запаса, таких как его идентификатор, имя, количество и т. Д.
-
StockService — Служба акций возвращает текущую цену акций.
-
EasyMock.createMock (…) — EasyMock создал макет стокового сервиса.
-
EasyMock.expect (…). AndReturn (…) — Ложная реализация метода getPrice интерфейса stockService. Для googleStock верните 50,00 в качестве цены.
-
EasyMock.replay (…) — EasyMock подготавливает объект Mock к готовности, чтобы его можно было использовать для тестирования.
-
portfolio.setStocks (…) — Портфель теперь содержит список из двух акций.
-
portfolio.setStockService (…) — Назначает объект-макет stockService портфелю.
-
portfolio.getMarketValue () () — Портфель возвращает рыночную стоимость, основанную на его акциях, используя сервис фиктивной акции.
Портфолио — объект для хранения списка акций и получения рыночной стоимости, рассчитанной с использованием цен акций и количества акций.
Запас — объект для переноса деталей запаса, таких как его идентификатор, имя, количество и т. Д.
StockService — Служба акций возвращает текущую цену акций.
EasyMock.createMock (…) — EasyMock создал макет стокового сервиса.
EasyMock.expect (…). AndReturn (…) — Ложная реализация метода getPrice интерфейса stockService. Для googleStock верните 50,00 в качестве цены.
EasyMock.replay (…) — EasyMock подготавливает объект Mock к готовности, чтобы его можно было использовать для тестирования.
portfolio.setStocks (…) — Портфель теперь содержит список из двух акций.
portfolio.setStockService (…) — Назначает объект-макет stockService портфелю.
portfolio.getMarketValue () () — Портфель возвращает рыночную стоимость, основанную на его акциях, используя сервис фиктивной акции.
EasyMock — Настройка среды
EasyMock — это фреймворк для Java, поэтому самое первое требование — установить JDK на вашем компьютере.
Системные требования
JDK | 1,5 или выше. |
---|---|
объем памяти | нет минимальных требований. |
Дисковое пространство | нет минимальных требований. |
Операционная система | нет минимальных требований. |
Шаг 1. Проверка установки Java на вашем компьютере.
Откройте консоль и выполните следующую команду Java .
Операционные системы | задача | команда |
---|---|---|
Windows | Открытая командная консоль | c: \> Java-версия |
Linux | Открытый командный терминал | $ java-версия |
макинтош | Открытый терминал | машина: ~ Джозеф $ Java-версия |
Давайте проверим вывод для всех операционных систем:
Операционные системы | Выход |
---|---|
Windows |
Java-версия «1.6.0_21» Java (TM) SE Runtime Environment (сборка 1.6.0_21-b07) Клиентская виртуальная машина Java HotSpot (TM) (сборка 17.0-b17, смешанный режим, совместное использование) |
Linux |
Java-версия «1.6.0_21» Java (TM) SE Runtime Environment (сборка 1.6.0_21-b07) Клиентская виртуальная машина Java HotSpot (TM) (сборка 17.0-b17, смешанный режим, совместное использование) |
макинтош |
Java-версия «1.6.0_21» Java (TM) SE Runtime Environment (сборка 1.6.0_21-b07) Java HotSpot (TM) 64-разрядная серверная виртуальная машина (сборка 17.0-b17, смешанный режим, совместное использование) |
Java-версия «1.6.0_21»
Java (TM) SE Runtime Environment (сборка 1.6.0_21-b07)
Клиентская виртуальная машина Java HotSpot (TM) (сборка 17.0-b17, смешанный режим, совместное использование)
Java-версия «1.6.0_21»
Java (TM) SE Runtime Environment (сборка 1.6.0_21-b07)
Клиентская виртуальная машина Java HotSpot (TM) (сборка 17.0-b17, смешанный режим, совместное использование)
Java-версия «1.6.0_21»
Java (TM) SE Runtime Environment (сборка 1.6.0_21-b07)
Java HotSpot (TM) 64-разрядная серверная виртуальная машина (сборка 17.0-b17, смешанный режим, совместное использование)
Если у вас не установлена Java, установите Java Software Development Kit (SDK) с http://www.oracle.com/technetwork/java/javase/downloads/index.html.
Мы предполагаем, что для этого урока в вашей системе установлена Java 1.6.0_21.
Шаг 2: Установите среду JAVA
Установите переменную среды JAVA_HOME, чтобы она указывала на местоположение базовой директории, где установлена Java на вашем компьютере. Например,
Операционные системы | Выход |
---|---|
Windows | Задайте для переменной среды JAVA_HOME значение C: \ Program Files \ Java \ jdk1.6.0_21. |
Linux | экспорт JAVA_HOME = / usr / local / java-current |
макинтош | export JAVA_HOME = / Библиотека / Java / Главная |
Добавьте местоположение компилятора Java в системный путь.
Операционные системы | Выход |
---|---|
Windows | Добавьте строку; C: \ Program Files \ Java \ jdk1.6.0_21 \ bin в конец системной переменной Path. |
Linux | экспорт PATH = $ PATH: $ JAVA_HOME / bin / |
макинтош | не требуется |
Проверьте установку Java с помощью команды java -version, как описано выше.
Шаг 3: Загрузите архив EasyMock
Загрузите последнюю версию EasyMock с http://sourceforge.net/projects/easymock/files/EasyMock/3.2/easymock-3.2.zip/download. Сохраните папку zip на диске C, скажем, C: \> EasyMock.
Операционные системы | Название архива |
---|---|
Windows | easymock-3.2.zip |
Linux | easymock-3.2.zip |
макинтош | easymock-3.2.zip |
Шаг 4: Загрузите зависимости EasyMock
Загрузите последнюю версию файла jar cglib с сайта https://github.com/cglib/cglib/releases и скопируйте его в папку C: \> EasyMock. На момент написания этого руководства последняя версия была 3.1.
Загрузите последнюю версию zip-файла objenesis с http://objenesis.org/download.html и скопируйте его в папку C: \> EasyMock. На момент написания этого руководства последняя версия была 2.1. Извлеките objenesis-2.1.jar в папку C: \> EasyMock
Шаг 5: Установите среду EasyMock
Задайте переменную среды EasyMock_HOME, чтобы она указывала на базовую папку, в которой EasyMock и файлы зависимостей хранятся на вашем компьютере. В следующей таблице показано, как установить переменную среды в разных операционных системах, предполагая, что мы извлекли easymock-3.2.jar, cglib-3.1.jar и objenesis-2.1.jar в папку C: \> EasyMock.
Операционные системы | Выход |
---|---|
Windows | Установите переменную среды EasyMock_HOME в C: \ EasyMock |
Linux | export EasyMock_HOME = / usr / local / EasyMock |
макинтош | export EasyMock_HOME = / Библиотека / EasyMock |
Шаг 6: Установите переменную CLASSPATH
Задайте переменную среды CLASSPATH, чтобы указать место, где хранятся EasyMock и jar зависимостей. В следующей таблице показано, как установить переменную CLASSPATH в разных операционных системах.
Операционные системы | Выход |
---|---|
Windows | Установите для переменной среды CLASSPATH значение% CLASSPATH%;% EasyMock_HOME% \ easymock-3.2.jar;% EasyMock_HOME% \ cglib-3.1.jar;% EasyMock_HOME% \ objenesis-2.1.jar;. |
Linux | экспорт CLASSPATH = $ CLASSPATH: $ EasyMock_HOME / easymock-3.2.jar: $ EasyMock_HOME / cglib-3.1.jar: $ EasyMock_HOME / objenesis-2.1.jar :. |
макинтош | экспорт CLASSPATH = $ CLASSPATH: $ EasyMock_HOME / easymock-3.2.jar: $ EasyMock_HOME / cglib-3.1.jar: $ EasyMock_HOME / objenesis-2.1.jar :. |
Шаг 7: Скачать архив JUnit
Загрузите последнюю версию JAR-файла JUnit по адресу https://github.com/junit-team/junit/wiki/Download-and-Install. Сохраните папку в папке C: \> Junit.
Операционные системы | Название архива |
---|---|
Windows | junit4.11.jar, hamcrest-core-1.2.1.jar |
Linux | junit4.11.jar, hamcrest-core-1.2.1.jar |
макинтош | junit4.11.jar, hamcrest-core-1.2.1.jar |
Шаг 8: Установите среду JUnit
Установите переменную среды JUNIT_HOME, чтобы она указывала на местоположение базовой директории, где хранятся файлы JUnit на вашем компьютере. В следующей таблице показано, как установить эту переменную среды в разных операционных системах, при условии, что мы сохранили junit4.11.jar и hamcrest-core-1.2.1.jar в C: \> Junit.
Операционные системы | Выход |
---|---|
Windows | Установите переменную окружения JUNIT_HOME в C: \ JUNIT |
Linux | экспорт JUNIT_HOME = / usr / local / JUNIT |
макинтош | экспорт JUNIT_HOME = / библиотека / JUNIT |
Шаг 9: Установите переменную CLASSPATH
Установите переменную среды CLASSPATH, чтобы она указывала на расположение JAR JAR. В следующей таблице показано, как это делается в разных операционных системах.
Операционные системы | Выход |
---|---|
Windows | Установите для переменной среды CLASSPATH значение% CLASSPATH%;% JUNIT_HOME% \ junit4.11.jar;% JUNIT_HOME% \ hamcrest-core-1.2.1.jar;.; |
Linux | export CLASSPATH = $ CLASSPATH: $ JUNIT_HOME / junit4.11.jar: $ JUNIT_HOME /hamcrest-core-1.2.1.jar :. |
макинтош | export CLASSPATH = $ CLASSPATH: $ JUNIT_HOME / junit4.11.jar: $ JUNIT_HOME /hamcrest-core-1.2.1.jar :. |
EasyMock — первое приложение
Прежде чем углубляться в детали EasyMock Framework, давайте посмотрим на приложение в действии. В этом примере мы создали макет Stock Service, чтобы получить фиктивную цену некоторых акций, а также протестировали модуль java под названием Portfolio.
Процесс обсуждается ниже в пошаговом порядке.
Шаг 1: Создайте класс JAVA для представления акции
Stock.java
public class Stock { private String stockId; private String name; private int quantity; public Stock(String stockId, String name, int quantity){ this.stockId = stockId; this.name = name; this.quantity = quantity; } public String getStockId() { return stockId; } public void setStockId(String stockId) { this.stockId = stockId; } public int getQuantity() { return quantity; } public String getTicker() { return name; } }
Шаг 2: Создайте интерфейс StockService для получения цены акции
StockService.java
public interface StockService { public double getPrice(Stock stock); }
Шаг 3: Создайте портфолио класса для представления портфолио любого клиента
Portfolio.java
import java.util.List; public class Portfolio { private StockService stockService; private Liststocks; public StockService getStockService() { return stockService; } public void setStockService(StockService stockService) { this.stockService = stockService; } public List getStocks() { return stocks; } public void setStocks(List stocks) { this.stocks = stocks; } public double getMarketValue(){ double marketValue = 0.0; for(Stock stock:stocks){ marketValue += stockService.getPrice(stock) * stock.getQuantity(); } return marketValue; } }
Шаг 4: протестируйте класс портфолио
Давайте проверим класс Portfolio, введя в него макет StockService. Макет будет создан EasyMock.
PortfolioTester.java
import java.util.ArrayList; import java.util.List; import org.easymock.EasyMock; public class PortfolioTester { Portfolio portfolio; StockService stockService; public static void main(String[] args){ PortfolioTester tester = new PortfolioTester(); tester.setUp(); System.out.println(tester.testMarketValue()?"pass":"fail"); } public void setUp(){ //Create a portfolio object which is to be tested portfolio = new Portfolio(); //Create the mock object of stock service stockService = EasyMock.createMock(StockService.class); //set the stockService to the portfolio portfolio.setStockService(stockService); } public boolean testMarketValue(){ //Creates a list of stocks to be added to the portfolio Liststocks = new ArrayList<Stock>(); Stock googleStock = new Stock("1","Google", 10); Stock microsoftStock = new Stock("2","Microsoft",100); stocks.add(googleStock); stocks.add(microsoftStock); //add stocks to the portfolio portfolio.setStocks(stocks); // mock the behavior of stock service to return the value of various stocks EasyMock.expect(stockService.getPrice(googleStock)).andReturn(50.00); EasyMock.expect(stockService.getPrice(microsoftStock)).andReturn(1000.00); // activate the mock EasyMock.replay(stockService); double marketValue = portfolio.getMarketValue(); return marketValue == 100500.0; } }
Шаг 5: Проверьте результат
Скомпилируйте классы, используя компилятор javac следующим образом:
C:\EasyMock_WORKSPACE>javac Stock.java StockService.java Portfolio.java PortfolioTester.java
Теперь запустите PortfolioTester, чтобы увидеть результат:
C:\EasyMock_WORKSPACE>java PortfolioTester
Проверьте вывод
pass
EasyMock — Интеграция JUnit
В этой главе мы узнаем, как интегрировать JUnit и EasyMock вместе. Для учебника JUnit, пожалуйста, обратитесь к JUnit . Здесь мы создадим математическое приложение, которое использует CalculatorService для выполнения основных математических операций, таких как сложение, вычитание, умножение и деление. Мы будем использовать EasyMock, чтобы высмеивать фиктивную реализацию CalculatorService. Кроме того, мы широко использовали аннотации для демонстрации их совместимости с JUnit и EasyMock.
Процесс обсуждается ниже в пошаговом порядке.
Шаг 1. Создайте интерфейс CalculatorService для предоставления математических функций.
CalculatorService.java
public interface CalculatorService { public double add(double input1, double input2); public double subtract(double input1, double input2); public double multiply(double input1, double input2); public double divide(double input1, double input2); }
Шаг 2. Создайте класс JAVA для представления MathApplication.
MathApplication.java
public class MathApplication { private CalculatorService calcService; public void setCalculatorService(CalculatorService calcService){ this.calcService = calcService; } public double add(double input1, double input2){ return calcService.add(input1, input2); } public double subtract(double input1, double input2){ return calcService.subtract(input1, input2); } public double multiply(double input1, double input2){ return calcService.multiply(input1, input2); } public double divide(double input1, double input2){ return calcService.divide(input1, input2); } }
Шаг 3: протестируйте класс MathApplication
Давайте проверим класс MathApplication, введя в него макет calculatorService. Макет будет создан EasyMock.
MathApplicationTester.java
import org.easymock.EasyMock; import org.easymock.EasyMockRunner; import org.easymock.Mock; import org.easymock.TestSubject; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; // @RunWith attaches a runner with the test class to initialize the test data @RunWith(EasyMockRunner.class) public class MathApplicationTester { // @TestSubject annotation is used to identify class which is going to use the mock object @TestSubject MathApplication mathApplication = new MathApplication(); //@Mock annotation is used to create the mock object to be injected @Mock CalculatorService calcService; @Test public void testAdd(){ //add the behavior of calc service to add two numbers EasyMock.expect(calcService.add(10.0,20.0)).andReturn(30.00); //activate the mock EasyMock.replay(calcService); //test the add functionality Assert.assertEquals(mathApplication.add(10.0, 20.0),30.0,0); } }
Шаг 4. Создайте класс для выполнения в тестовых примерах
Создайте файл Java-класса с именем TestRunner в C: \> EasyMock_WORKSPACE для выполнения тестовых наборов .
TestRunner.java
import org.junit.runner.JUnitCore; import org.junit.runner.Result; import org.junit.runner.notification.Failure; public class TestRunner { public static void main(String[] args) { Result result = JUnitCore.runClasses(MathApplicationTester.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } System.out.println(result.wasSuccessful()); } }
Шаг 5: Проверьте результат
Скомпилируйте классы, используя компилятор javac следующим образом:
C:\EasyMock_WORKSPACE>javac CalculatorService.java MathApplication.java MathApplicationTester.java TestRunner.java
Теперь запустите Test Runner, чтобы увидеть результат:
C:\EasyMock_WORKSPACE>java TestRunner
Проверьте вывод.
true
EasyMock — добавление поведения
EasyMock добавляет функциональность к фиктивному объекту, используя методы ожидаемо () и предпологаемое ожидание () . Взгляните на следующий фрагмент кода.
//add the behavior of calc service to add two numbers EasyMock.expect(calcService.add(10.0,20.0)).andReturn(30.00);
Здесь мы проинструктировали EasyMock дать поведение добавления 10 и 20 к методу add calcService и в результате вернуть значение 30,00.
В этот момент Mock просто записал поведение, но оно не работает как фиктивный объект. После вызова повтора все работает как положено.
//add the behavior of calc service to add two numbers EasyMock.expect(calcService.add(10.0,20.0)).andReturn(30.00); //activate the mock //EasyMock.replay(calcService);
Пример без EasyMock.Replay ()
Шаг 1. Создайте интерфейс CalculatorService для предоставления математических функций.
CalculatorService.java
public interface CalculatorService { public double add(double input1, double input2); public double subtract(double input1, double input2); public double multiply(double input1, double input2); public double divide(double input1, double input2); }
Шаг 2. Создайте класс JAVA для представления MathApplication.
MathApplication.java
public class MathApplication { private CalculatorService calcService; public void setCalculatorService(CalculatorService calcService){ this.calcService = calcService; } public double add(double input1, double input2){ return calcService.add(input1, input2); } public double subtract(double input1, double input2){ return calcService.subtract(input1, input2); } public double multiply(double input1, double input2){ return calcService.multiply(input1, input2); } public double divide(double input1, double input2){ return calcService.divide(input1, input2); } }
Шаг 3: протестируйте класс MathApplication
Давайте проверим класс MathApplication, введя в него макет calculatorService. Макет будет создан EasyMock.
MathApplicationTester.java
import org.easymock.EasyMock; import org.easymock.EasyMockRunner; import org.easymock.Mock; import org.easymock.TestSubject; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; //@RunWith attaches a runner with the test class to initialize the test data @RunWith(EasyMockRunner.class) public class MathApplicationTester { // @TestSubject annotation is used to identify the class which is going to use the mock object @TestSubject MathApplication mathApplication = new MathApplication(); //@Mock annotation is used to create the mock object to be injected @Mock CalculatorService calcService; @Test public void testAdd(){ //add the behavior of calc service to add two numbers EasyMock.expect(calcService.add(10.0,20.0)).andReturn(30.00); //activate the mock //EasyMock.replay(calcService); //test the add functionality Assert.assertEquals(mathApplication.add(10.0, 20.0),30.0,0); } }
Шаг 4: Выполнить контрольные примеры
Создайте файл Java-класса с именем TestRunner в C: \> EasyMock_WORKSPACE для выполнения тестовых наборов .
TestRunner.java
import org.junit.runner.JUnitCore; import org.junit.runner.Result; import org.junit.runner.notification.Failure; public class TestRunner { public static void main(String[] args) { Result result = JUnitCore.runClasses(MathApplicationTester.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } System.out.println(result.wasSuccessful()); } }
Шаг 5: Проверьте результат
Скомпилируйте классы, используя компилятор javac следующим образом:
C:\EasyMock_WORKSPACE>javac Calculator Service.java Math Application.java Math Application Tester.java Test Runner.java
Теперь запустите Test Runner, чтобы увидеть результат:
C:\EasyMock_WORKSPACE>java TestRunner
Проверьте вывод.
testAdd(MathApplicationTester): expected:<0.0> but was:<30.0> false
Пример с EasyMock.Replay ()
Шаг 1: Создайте интерфейс CalculatorService для предоставления математических функций.
CalculatorService.java
public interface CalculatorService { public double add(double input1, double input2); public double subtract(double input1, double input2); public double multiply(double input1, double input2); public double divide(double input1, double input2); }
Шаг 2. Создайте класс JAVA для представления MathApplication.
MathApplication.java
public class MathApplication { private CalculatorService calcService; public void setCalculatorService(CalculatorService calcService){ this.calcService = calcService; } public double add(double input1, double input2){ return calcService.add(input1, input2); } public double subtract(double input1, double input2){ return calcService.subtract(input1, input2); } public double multiply(double input1, double input2){ return calcService.multiply(input1, input2); } public double divide(double input1, double input2){ return calcService.divide(input1, input2); } }
Шаг 3: протестируйте класс MathApplication
Давайте проверим класс MathApplication, введя в него макет calculatorService. Макет будет создан EasyMock.
MathApplicationTester.java
import org.easymock.EasyMock; import org.easymock.EasyMockRunner; import org.easymock.Mock; import org.easymock.TestSubject; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; // @RunWith attaches a runner with the test class to initialize the test data @RunWith(EasyMockRunner.class) public class MathApplicationTester { // @TestSubject annotation is used to identify class which is going to use the mock object @TestSubject MathApplication mathApplication = new MathApplication(); // @Mock annotation is used to create the mock object to be injected @Mock CalculatorService calcService; @Test public void testAdd(){ // add the behavior of calc service to add two numbers EasyMock.expect(calcService.add(10.0,20.0)).andReturn(30.00); //activate the mock EasyMock.replay(calcService); // test the add functionality Assert.assertEquals(mathApplication.add(10.0, 20.0),30.0,0); } }
Шаг 4: Выполнить контрольные примеры
Создайте файл Java-класса с именем TestRunner в C: \> EasyMock_WORKSPACE для выполнения тестовых наборов .
TestRunner.java
import org.junit.runner.JUnitCore; import org.junit.runner.Result; import org.junit.runner.notification.Failure; public class TestRunner { public static void main(String[] args) { Result result = JUnitCore.runClasses(MathApplicationTester.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } System.out.println(result.wasSuccessful()); } }
Шаг 5: Проверьте результат
Скомпилируйте классы, используя компилятор javac следующим образом:
C:\EasyMock_WORKSPACE>javac Calculator Service.java Math Application.java Math Application Tester.java Test Runner.java
Теперь запустите Test Runner, чтобы увидеть результат.
C:\EasyMock_WORKSPACE>java TestRunner
Проверьте вывод.
true
EasyMock — проверка поведения
EasyMock может убедиться, что макет используется или нет. Это делается с помощью метода verify () . Взгляните на следующий фрагмент кода.
//activate the mock EasyMock.replay(calcService); //test the add functionality Assert.assertEquals(mathApplication.add(10.0, 20.0),30.0,0); //verify call to calcService is made or not EasyMock.verify(calcService);
Пример без EasyMock.Verify ()
Шаг 1. Создайте интерфейс CalculatorService для предоставления математических функций.
CalculatorService.java
public interface CalculatorService { public double add(double input1, double input2); public double subtract(double input1, double input2); public double multiply(double input1, double input2); public double divide(double input1, double input2); }
Шаг 2. Создайте класс JAVA для представления MathApplication.
MathApplication.java
public class MathApplication { private CalculatorService calcService; public void setCalculatorService(CalculatorService calcService){ this.calcService = calcService; } public double add(double input1, double input2){ //return calcService.add(input1, input2); return input1 + input2; } public double subtract(double input1, double input2){ return calcService.subtract(input1, input2); } public double multiply(double input1, double input2){ return calcService.multiply(input1, input2); } public double divide(double input1, double input2){ return calcService.divide(input1, input2); } }
Шаг 3: протестируйте класс MathApplication
Давайте проверим класс MathApplication, введя в него макет calculatorService. Макет будет создан EasyMock.
MathApplicationTester.java
import org.easymock.EasyMock; import org.easymock.EasyMockRunner; import org.easymock.Mock; import org.easymock.TestSubject; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; // @RunWith attaches a runner with the test class to initialize the test data @RunWith(EasyMockRunner.class) public class MathApplicationTester { // @TestSubject annotation is used to identify class which is going to use the mock object @TestSubject MathApplication mathApplication = new MathApplication(); //@Mock annotation is used to create the mock object to be injected @Mock CalculatorService calcService; @Test public void testAdd(){ //add the behavior of calc service to add two numbers EasyMock.expect(calcService.add(10.0,20.0)).andReturn(30.00); //activate the mock EasyMock.replay(calcService); //test the add functionality Assert.assertEquals(mathApplication.add(10.0, 20.0),30.0,0); //verify call to calcService is made or not //EasyMock.verify(calcService); } }
Шаг 4: Выполнить контрольные примеры
Создайте файл Java-класса с именем TestRunner в C: \> EasyMock_WORKSPACE для выполнения тестовых наборов .
TestRunner.java
import org.junit.runner.JUnitCore; import org.junit.runner.Result; import org.junit.runner.notification.Failure; public class TestRunner { public static void main(String[] args) { Result result = JUnitCore.runClasses(MathApplicationTester.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } System.out.println(result.wasSuccessful()); } }
Шаг 5: Проверьте результат
Скомпилируйте классы, используя компилятор javac следующим образом:
C:\EasyMock_WORKSPACE>javac Calculator Service.java Math Application.java Math Application Tester.java Test Runner.java
Теперь запустите Test Runner, чтобы увидеть результат
C:\EasyMock_WORKSPACE>java TestRunner
Проверьте вывод.
true
Пример с EasyMock.Verify ()
Шаг 1: Создайте интерфейс CalculatorService для предоставления математических функций
CalculatorService.java
public interface CalculatorService { public double add(double input1, double input2); public double subtract(double input1, double input2); public double multiply(double input1, double input2); public double divide(double input1, double input2); }
Шаг 2. Создайте класс JAVA для представления MathApplication.
MathApplication.java
public class MathApplication { private CalculatorService calcService; public void setCalculatorService(CalculatorService calcService){ this.calcService = calcService; } public double add(double input1, double input2){ //return calcService.add(input1, input2); return input1 + input2; } public double subtract(double input1, double input2){ return calcService.subtract(input1, input2); } public double multiply(double input1, double input2){ return calcService.multiply(input1, input2); } public double divide(double input1, double input2){ return calcService.divide(input1, input2); } }
Шаг 3: протестируйте класс MathApplication
Давайте проверим класс MathApplication, введя в него макет calculatorService. Макет будет создан EasyMock.
MathApplicationTester.java
import org.easymock.EasyMock; import org.easymock.EasyMockRunner; import org.easymock.Mock; import org.easymock.TestSubject; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; // @RunWith attaches a runner with the test class to initialize the test data @RunWith(EasyMockRunner.class) public class MathApplicationTester { // @TestSubject annotation is used to identify class which is going to use the mock object @TestSubject MathApplication mathApplication = new MathApplication(); //@Mock annotation is used to create the mock object to be injected @Mock CalculatorService calcService; @Test public void testAdd(){ //add the behavior of calc service to add two numbers EasyMock.expect(calcService.add(10.0,20.0)).andReturn(30.00); //activate the mock EasyMock.replay(calcService); //test the add functionality Assert.assertEquals(mathApplication.add(10.0, 20.0),30.0,0); //verify call to calcService is made or not EasyMock.verify(calcService); } }
Шаг 4: Выполнить контрольные примеры
Создайте файл Java-класса с именем TestRunner в C: \> EasyMock_WORKSPACE для выполнения тестовых наборов .
TestRunner.java
import org.junit.runner.JUnitCore; import org.junit.runner.Result; import org.junit.runner.notification.Failure; public class TestRunner { public static void main(String[] args) { Result result = JUnitCore.runClasses(MathApplicationTester.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } System.out.println(result.wasSuccessful()); } }
Шаг 5: Проверьте результат
Скомпилируйте классы, используя компилятор javac следующим образом:
C:\EasyMock_WORKSPACE>javac Calculator Service.java Math Application.java Math Application Tester.java Test Runner.java
Теперь запустите Test Runner, чтобы увидеть результат:
C:\EasyMock_WORKSPACE>java TestRunner
Проверьте вывод.
testAdd(MathApplicationTester): Expectation failure on verify: CalculatorService.add(10.0, 20.0): expected: 1, actual: 0 false
EasyMock — ожидание звонков
EasyMock обеспечивает специальную проверку количества вызовов, которые могут быть сделаны определенным методом. Предположим, что MathApplication должен вызывать метод CalculatorService.serviceUsed () только один раз, тогда он не сможет вызывать CalculatorService.serviceUsed () более одного раза.
//add the behavior of calc service to add two numbers and serviceUsed. EasyMock.expect(calcService.add(10.0,20.0)).andReturn(30.00); calcService.serviceUsed(); //limit the method call to 1, no less and no more calls are allowed EasyMock.expectLastCall().times(1);
Создайте интерфейс CalculatorService следующим образом.
CalculatorService.java
public interface CalculatorService { public double add(double input1, double input2); public double subtract(double input1, double input2); public double multiply(double input1, double input2); public double divide(double input1, double input2); public void serviceUsed(); }
Пример с calcService.serviceUsed (), который вызывается один раз
Шаг 1. Создайте интерфейс CalculatorService для предоставления математических функций.
CalculatorService.java
public interface CalculatorService { public double add(double input1, double input2); public double subtract(double input1, double input2); public double multiply(double input1, double input2); public double divide(double input1, double input2); public void serviceUsed(); }
Шаг 2. Создайте класс JAVA для представления MathApplication.
MathApplication.java
public class MathApplication { private CalculatorService calcService; public void setCalculatorService(CalculatorService calcService){ this.calcService = calcService; } public double add(double input1, double input2){ calcService.serviceUsed(); return calcService.add(input1, input2); } public double subtract(double input1, double input2){ return calcService.subtract(input1, input2); } public double multiply(double input1, double input2){ return calcService.multiply(input1, input2); } public double divide(double input1, double input2){ return calcService.divide(input1, input2); }
Шаг 3: протестируйте класс MathApplication
Давайте проверим класс MathApplication, введя в него макет calculatorService. Макет будет создан EasyMock.
MathApplicationTester.java MathApplicationTester.java
import org.easymock.EasyMock; import org.easymock.EasyMockRunner; import org.easymock.Mock; import org.easymock.TestSubject; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; // @RunWith attaches a runner with the test class to initialize the test data @RunWith(EasyMockRunner.class) public class MathApplicationTester { // @TestSubject annotation is used to identify class which is going to use the mock object @TestSubject MathApplication mathApplication = new MathApplication(); // @Mock annotation is used to create the mock object to be injected @Mock CalculatorService calcService; @Test public void testAdd(){ //add the behavior of calc service to add two numbers EasyMock.expect(calcService.add(10.0,20.0)).andReturn(30.00); calcService.serviceUsed(); EasyMock.expectLastCall().times(1); //activate the mock EasyMock.replay(calcService); //test the add functionality Assert.assertEquals(mathApplication.add(10.0, 20.0),30.0,0); //verify call to calcService is made or not EasyMock.verify(calcService); } }
Шаг 4: Выполнить контрольные примеры
Создайте файл Java-класса с именем TestRunner в C: \> EasyMock_WORKSPACE для выполнения тестовых наборов .
TestRunner.java
import org.junit.runner.JUnitCore; import org.junit.runner.Result; import org.junit.runner.notification.Failure; public class TestRunner { public static void main(String[] args) { Result result = JUnitCore.runClasses(MathApplicationTester.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } System.out.println(result.wasSuccessful()); } }
Шаг 5: Проверьте результат
Скомпилируйте классы, используя компилятор javac следующим образом:
C:\EasyMock_WORKSPACE>javac Calculator Service.java Math Application.java Math Application Tester.java Test Runner.java
Теперь запустите Test Runner, чтобы увидеть результат:
C:\EasyMock_WORKSPACE>java TestRunner
Проверьте вывод.
true
Пример с calcService.serviceUsed () Вызывается дважды
Шаг 1: Создайте интерфейс CalculatorService для предоставления математических функций.
CalculatorService.java
public interface CalculatorService { public double add(double input1, double input2); public double subtract(double input1, double input2); public double multiply(double input1, double input2); public double divide(double input1, double input2); public void serviceUsed(); }
Шаг 2. Создайте класс JAVA для представления MathApplication.
MathApplication.java
public class MathApplication { private CalculatorService calcService; public void setCalculatorService(CalculatorService calcService){ this.calcService = calcService; } public double add(double input1, double input2){ calcService.serviceUsed(); calcService.serviceUsed(); return calcService.add(input1, input2); } public double subtract(double input1, double input2){ return calcService.subtract(input1, input2); } public double multiply(double input1, double input2){ return calcService.multiply(input1, input2); } public double divide(double input1, double input2){ return calcService.divide(input1, input2); } }
Шаг 3: протестируйте класс MathApplication
Давайте проверим класс MathApplication, введя в него макет calculatorService. Макет будет создан EasyMock.
MathApplicationTester.java MathApplicationTester.java
import org.easymock.EasyMock; import org.easymock.EasyMockRunner; import org.easymock.Mock; import org.easymock.TestSubject; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; // @RunWith attaches a runner with the test class to initialize the test data @RunWith(EasyMockRunner.class) public class MathApplicationTester { // @TestSubject annotation is used to identify class which is going to use the mock object @TestSubject MathApplication mathApplication = new MathApplication(); //@Mock annotation is used to create the mock object to be injected @Mock CalculatorService calcService; @Test public void testAdd(){ //add the behavior of calc service to add two numbers EasyMock.expect(calcService.add(10.0,20.0)).andReturn(30.00); calcService.serviceUsed(); EasyMock.expectLastCall().times(1); //activate the mock EasyMock.replay(calcService); //test the add functionality Assert.assertEquals(mathApplication.add(10.0, 20.0),30.0,0); //verify call to calcService is made or not EasyMock.verify(calcService); } }
Шаг 4: Выполнить контрольные примеры
Создайте файл Java-класса с именем TestRunner в C: \> EasyMock_WORKSPACE для выполнения тестовых наборов .
TestRunner.java
import org.junit.runner.JUnitCore; import org.junit.runner.Result; import org.junit.runner.notification.Failure; public class TestRunner { public static void main(String[] args) { Result result = JUnitCore.runClasses(MathApplicationTester.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } System.out.println(result.wasSuccessful()); } }
Шаг 5: Проверьте результат
Скомпилируйте классы, используя компилятор javac следующим образом:
C:\EasyMock_WORKSPACE>javac CalculatorService.java MathApplication.java MathApplicationTester.java TestRunner.java
Теперь запустите Test Runner, чтобы увидеть результат:
C:\EasyMock_WORKSPACE>java TestRunner
Проверьте вывод.
testAdd(com.tutorialspoint.mock.MathApplicationTester): Unexpected method call CalculatorService.serviceUsed(): CalculatorService.add(10.0, 20.0): expected: 1, actual: 0 CalculatorService.serviceUsed(): expected: 1, actual: 2 false
Пример без вызова calcService.serviceUsed ()
Шаг 1: Создание интерфейса калькулятора сервиса для предоставления математических функций
CalculatorService.java
public interface CalculatorService { public double add(double input1, double input2); public double subtract(double input1, double input2); public double multiply(double input1, double input2); public double divide(double input1, double input2); public void serviceUsed(); }
Шаг 2. Создайте класс JAVA для представления MathApplication.
MathApplication.java
public class MathApplication { private CalculatorService calcService; public void setCalculatorService(CalculatorService calcService){ this.calcService = calcService; } public double add(double input1, double input2){ return calcService.add(input1, input2); } public double subtract(double input1, double input2){ return calcService.subtract(input1, input2); } public double multiply(double input1, double input2){ return calcService.multiply(input1, input2); } public double divide(double input1, double input2){ return calcService.divide(input1, input2); } }
Шаг 3: протестируйте класс MathApplication
Давайте проверим класс MathApplication, введя в него макет calculatorService. Макет будет создан EasyMock.
MathApplicationTester.java MathApplicationTester.java
import org.easymock.EasyMock; import org.easymock.EasyMockRunner; import org.easymock.Mock; import org.easymock.TestSubject; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; // @RunWith attaches a runner with the test class to initialize the test data @RunWith(EasyMockRunner.class) public class MathApplicationTester { // @TestSubject annotation is used to identify class which is going to use the mock object @TestSubject MathApplication mathApplication = new MathApplication(); //@Mock annotation is used to create the mock object to be injected @Mock CalculatorService calcService; @Test public void testAdd(){ //add the behavior of calc service to add two numbers EasyMock.expect(calcService.add(10.0,20.0)).andReturn(30.00); calcService.serviceUsed(); EasyMock.expectLastCall().times(1); //activate the mock EasyMock.replay(calcService); //test the add functionality Assert.assertEquals(mathApplication.add(10.0, 20.0),30.0,0); //verify call to calcService is made or not EasyMock.verify(calcService); } }
Шаг 4: Выполнить контрольные примеры
Создайте файл Java-класса с именем TestRunner в C: \> EasyMock_WORKSPACE для выполнения тестовых наборов .
TestRunner.java
import org.junit.runner.JUnitCore; import org.junit.runner.Result; import org.junit.runner.notification.Failure; public class TestRunner { public static void main(String[] args) { Result result = JUnitCore.runClasses(MathApplicationTester.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } System.out.println(result.wasSuccessful()); } }
Шаг 5: Проверьте результат
Скомпилируйте классы, используя компилятор javac следующим образом:
C:\EasyMock_WORKSPACE>javac Calculator Service.java Math Application.java Math Application Tester.java Test Runner.java
Теперь запустите Test Runner, чтобы увидеть результат:
C:\EasyMock_WORKSPACE>java TestRunner
Проверьте вывод.
testAdd(com.tutorialspoint.mock.MathApplicationTester): Expectation failure on verify: CalculatorService.serviceUsed(): expected: 1, actual: 0 false
EasyMock — различные звонки
EasyMock предоставляет следующие дополнительные методы для изменения ожидаемого количества вызовов.
-
times (int min, int max) — ожидает между минимальным и максимальным вызовами.
-
atLeastOnce () — ожидает как минимум один вызов.
-
anyTimes () — ожидает неограниченное количество звонков.
times (int min, int max) — ожидает между минимальным и максимальным вызовами.
atLeastOnce () — ожидает как минимум один вызов.
anyTimes () — ожидает неограниченное количество звонков.
Пример со временем (мин, макс)
Шаг 1: Создайте интерфейс CalculatorService для предоставления математических функций
CalculatorService.java
public interface CalculatorService { public double add(double input1, double input2); public double subtract(double input1, double input2); public double multiply(double input1, double input2); public double divide(double input1, double input2); public void serviceUsed(); }
Шаг 2. Создайте класс JAVA для представления MathApplication.
MathApplication.java
public class MathApplication { private CalculatorService calcService; public void setCalculatorService(CalculatorService calcService){ this.calcService = calcService; } public double add(double input1, double input2){ calcService.serviceUsed(); calcService.serviceUsed(); calcService.serviceUsed(); return calcService.add(input1, input2); } public double subtract(double input1, double input2){ return calcService.subtract(input1, input2); } public double multiply(double input1, double input2){ return calcService.multiply(input1, input2); } public double divide(double input1, double input2){ return calcService.divide(input1, input2); } }
Шаг 3: протестируйте класс MathApplication
Давайте проверим класс MathApplication, введя в него макет calculatorService. Макет будет создан EasyMock.
MathApplicationTester.java MathApplicationTester.java
import org.easymock.EasyMock; import org.easymock.EasyMockRunner; import org.easymock.Mock; import org.easymock.TestSubject; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; // @RunWith attaches a runner with the test class to initialize the test data @RunWith(EasyMockRunner.class) public class MathApplicationTester { // @TestSubject annotation is used to identify class which is going to use the mock object @TestSubject MathApplication mathApplication = new MathApplication(); //@Mock annotation is used to create the mock object to be injected @Mock CalculatorService calcService; @Test public void testAdd(){ //add the behavior of calc service to add two numbers EasyMock.expect(calcService.add(10.0,20.0)).andReturn(30.00); calcService.serviceUsed(); EasyMock.expectLastCall().times(1,3); //activate the mock EasyMock.replay(calcService); //test the add functionality Assert.assertEquals(mathApplication.add(10.0, 20.0),30.0,0); //verify call to calcService is made or not EasyMock.verify(calcService); } }
Шаг 4: Выполнить контрольные примеры
Создайте файл Java-класса с именем TestRunner в C: \> EasyMock_WORKSPACE для выполнения тестовых примеров.
TestRunner.java
import org.junit.runner.JUnitCore; import org.junit.runner.Result; import org.junit.runner.notification.Failure; public class TestRunner { public static void main(String[] args) { Result result = JUnitCore.runClasses(MathApplicationTester.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } System.out.println(result.wasSuccessful()); } }
Шаг 5: Проверьте результат
Скомпилируйте классы, используя компилятор javac следующим образом:
C:\EasyMock_WORKSPACE>javac Calculator Service.java Math Application.java Math Application Tester.java Test Runner.java
Теперь запустите Test Runner, чтобы увидеть результат:
C:\EasyMock_WORKSPACE>java TestRunner
Проверьте вывод.
true
Пример с atLeastOnce
Шаг 1. Создайте интерфейс CalculatorService для предоставления математических функций.
CalculatorService.java
public interface CalculatorService { public double add(double input1, double input2); public double subtract(double input1, double input2); public double multiply(double input1, double input2); public double divide(double input1, double input2); public void serviceUsed(); }
Шаг 2. Создайте класс JAVA для представления MathApplication.
MathApplication.java
public class MathApplication { private CalculatorService calcService; public void setCalculatorService(CalculatorService calcService){ this.calcService = calcService; } public double add(double input1, double input2){ calcService.serviceUsed(); calcService.serviceUsed(); return calcService.add(input1, input2); } public double subtract(double input1, double input2){ return calcService.subtract(input1, input2); } public double multiply(double input1, double input2){ return calcService.multiply(input1, input2); } public double divide(double input1, double input2){ return calcService.divide(input1, input2); } }
Шаг 3: протестируйте класс MathApplication
Давайте проверим класс MathApplication, введя в него макет calculatorService. Макет будет создан EasyMock.
MathApplicationTester.java MathApplicationTester.java
import org.easymock.EasyMock; import org.easymock.EasyMockRunner; import org.easymock.Mock; import org.easymock.TestSubject; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; // @RunWith attaches a runner with the test class to initialize the test data @RunWith(EasyMockRunner.class) public class MathApplicationTester { // @TestSubject annotation is used to identify class which is going to use the mock object @TestSubject MathApplication mathApplication = new MathApplication(); //@Mock annotation is used to create the mock object to be injected @Mock CalculatorService calcService; @Test public void testAdd(){ //add the behavior of calc service to add two numbers EasyMock.expect(calcService.add(10.0,20.0)).andReturn(30.00); calcService.serviceUsed(); EasyMock.expectLastCall().atLeastOnce(); //activate the mock EasyMock.replay(calcService); //test the add functionality Assert.assertEquals(mathApplication.add(10.0, 20.0),30.0,0); //verify call to calcService is made or not EasyMock.verify(calcService); } }
Шаг 4: Выполнить контрольные примеры
Создайте файл Java-класса с именем TestRunner в C: \> EasyMock_WORKSPACE для выполнения тестовых наборов .
TestRunner.java
import org.junit.runner.JUnitCore; import org.junit.runner.Result; import org.junit.runner.notification.Failure; public class TestRunner { public static void main(String[] args) { Result result = JUnitCore.runClasses(MathApplicationTester.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } System.out.println(result.wasSuccessful()); } }
Шаг 5: Проверьте результат
Скомпилируйте классы, используя компилятор javac следующим образом:
C:\EasyMock_WORKSPACE>javac Calculator Service.java Math Application.java Math Application Tester.java Test Runner.java
Теперь запустите Test Runner, чтобы увидеть результат:
C:\EasyMock_WORKSPACE>java TestRunner
Проверьте вывод.
true
Пример с anyTimes
Шаг 1. Создайте интерфейс CalculatorService для предоставления математических функций.
CalculatorService.java
public interface CalculatorService { public double add(double input1, double input2); public double subtract(double input1, double input2); public double multiply(double input1, double input2); public double divide(double input1, double input2); public void serviceUsed(); }
Шаг 2. Создайте класс JAVA для представления MathApplication.
MathApplication.java
public class MathApplication { private CalculatorService calcService; public void setCalculatorService(CalculatorService calcService){ this.calcService = calcService; } public double add(double input1, double input2){ calcService.serviceUsed(); calcService.serviceUsed(); return calcService.add(input1, input2); } public double subtract(double input1, double input2){ return calcService.subtract(input1, input2); } public double multiply(double input1, double input2){ return calcService.multiply(input1, input2); } public double divide(double input1, double input2){ return calcService.divide(input1, input2); } }
Шаг 3: протестируйте класс MathApplication
Давайте проверим класс MathApplication, введя в него макет calculatorService. Макет будет создан EasyMock.
MathApplicationTester.java
import org.easymock.EasyMock; import org.easymock.EasyMockRunner; import org.easymock.Mock; import org.easymock.TestSubject; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; // @RunWith attaches a runner with the test class to initialize the test data @RunWith(EasyMockRunner.class) public class MathApplicationTester { // @TestSubject annotation is used to identify class which is going to use the mock object @TestSubject MathApplication mathApplication = new MathApplication(); //@Mock annotation is used to create the mock object to be injected @Mock CalculatorService calcService; @Test public void testAdd(){ //add the behavior of calc service to add two numbers EasyMock.expect(calcService.add(10.0,20.0)).andReturn(30.00); calcService.serviceUsed(); EasyMock.expectLastCall().anyTimes(); //activate the mock EasyMock.replay(calcService); //test the add functionality Assert.assertEquals(mathApplication.add(10.0, 20.0),30.0,0); //verify call to calcService is made or not EasyMock.verify(calcService); } }
Шаг 4: Выполнить контрольные примеры
Создайте файл Java-класса с именем TestRunner в C: \> EasyMock_WORKSPACE для выполнения тестовых наборов .
TestRunner.java
import org.junit.runner.JUnitCore; import org.junit.runner.Result; import org.junit.runner.notification.Failure; public class TestRunner { public static void main(String[] args) { Result result = JUnitCore.runClasses(MathApplicationTester.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } System.out.println(result.wasSuccessful()); } }
Шаг 5: Проверьте результат
Скомпилируйте классы, используя компилятор javac следующим образом:
C:\EasyMock_WORKSPACE>javac Calculator Service.java Math Application.java Math Application Tester.java Test Runner.java
Теперь запустите Test Runner, чтобы увидеть результат:
C:\EasyMock_WORKSPACE>java TestRunner
Проверьте вывод.
true
EasyMock — обработка исключений
EasyMock позволяет макету генерировать исключения, так что обработка исключений может быть протестирована. Взгляните на следующий фрагмент кода.
//add the behavior to throw exception EasyMock.expect(calc Service.add(10.0,20.0)).and Throw(new Runtime Exception("Add operation not implemented"));
Здесь мы добавили исключение к ложному объекту. MathApplication использует calcService, используя его метод add, и mock генерирует исключение RuntimeException при каждом вызове метода calcService.add ().
пример
Шаг 1. Создайте интерфейс CalculatorService для предоставления математических функций.
CalculatorService.java
public interface CalculatorService { public double add(double input1, double input2); public double subtract(double input1, double input2); public double multiply(double input1, double input2); public double divide(double input1, double input2); }
Шаг 2. Создайте класс JAVA для представления MathApplication.
MathApplication.java
public class MathApplication { private CalculatorService calcService; public void setCalculatorService(CalculatorService calcService){ this.calcService = calcService; } public double add(double input1, double input2){ return calcService.add(input1, input2); } public double subtract(double input1, double input2){ return calcService.subtract(input1, input2); } public double multiply(double input1, double input2){ return calcService.multiply(input1, input2); } public double divide(double input1, double input2){ return calcService.divide(input1, input2); } }
Шаг 3: протестируйте класс MathApplication
Давайте проверим класс MathApplication, введя в него макет calculatorService. Макет будет создан EasyMock.
MathApplicationTester.java
import org.easymock.EasyMock; import org.easymock.EasyMockRunner; import org.easymock.Mock; import org.easymock.TestSubject; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; // @RunWith attaches a runner with the test class to initialize the test data @RunWith(EasyMockRunner.class) public class MathApplicationTester { // @TestSubject annotation is used to identify class which is going to use the mock object @TestSubject MathApplication mathApplication = new MathApplication(); //@Mock annotation is used to create the mock object to be injected @Mock CalculatorService calcService; @Test(expected = RuntimeException.class) public void testAdd(){ //add the behavior to throw exception EasyMock.expect(calcService.add(10.0,20.0)).andThrow(new RuntimeException("Add operation not implemented")); //activate the mock EasyMock.replay(calcService); //test the add functionality Assert.assertEquals(mathApplication.add(10.0, 20.0),30.0,0); //verify call to calcService is made or not EasyMock.verify(calcService); } }
Шаг 4: Выполнить контрольные примеры
Создайте файл Java-класса с именем TestRunner в C: \> EasyMock_WORKSPACE для выполнения тестовых наборов .
TestRunner.java
import org.junit.runner.JUnitCore; import org.junit.runner.Result; import org.junit.runner.notification.Failure; public class TestRunner { public static void main(String[] args) { Result result = JUnitCore.runClasses(MathApplicationTester.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } System.out.println(result.wasSuccessful()); } }
Шаг 5: Проверьте результат
Скомпилируйте классы, используя компилятор javac следующим образом:
C:\EasyMock_WORKSPACE>javac MathApplicationTester.java
Теперь запустите Test Runner, чтобы увидеть результат:
C:\EasyMock_WORKSPACE>java TestRunner
Проверьте вывод.
true
EasyMock — createMock
До сих пор мы использовали аннотации для создания макетов. EasyMock предоставляет различные методы для создания фиктивных объектов. EasyMock.createMock () создает макеты, не беспокоясь о порядке вызовов методов, которые макет собирается выполнить в ходе своего действия.
Синтаксис
calcService = EasyMock.createMock(CalculatorService.class);
пример
Шаг 1. Создайте интерфейс CalculatorService для предоставления математических функций.
CalculatorService.java
public interface CalculatorService { public double add(double input1, double input2); public double subtract(double input1, double input2); public double multiply(double input1, double input2); public double divide(double input1, double input2); }
Шаг 2. Создайте класс JAVA для представления MathApplication.
MathApplication.java
public class MathApplication { private CalculatorService calcService; public void setCalculatorService(CalculatorService calcService){ this.calcService = calcService; } public double add(double input1, double input2){ return calcService.add(input1, input2); } public double subtract(double input1, double input2){ return calcService.subtract(input1, input2); } public double multiply(double input1, double input2){ return calcService.multiply(input1, input2); } public double divide(double input1, double input2){ return calcService.divide(input1, input2); } }
Шаг 3: протестируйте класс MathApplication
Давайте проверим класс MathApplication, введя в него макет calculatorService. Макет будет создан EasyMock.
Здесь мы добавили два ложных вызова методов add () и subtract () к ложному объекту с помощью метода wait (). Однако во время тестирования мы вызывали subtract () перед вызовом add (). Когда мы создаем фиктивный объект с помощью EasyMock.createMock (), порядок выполнения метода не имеет значения.
MathApplicationTester.java
import org.easymock.EasyMock; import org.easymock.EasyMockRunner; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @RunWith(EasyMockRunner.class) public class MathApplicationTester { private MathApplication mathApplication; private CalculatorService calcService; @Before public void setUp(){ mathApplication = new MathApplication(); calcService = EasyMock.createMock(CalculatorService.class); mathApplication.setCalculatorService(calcService); } @Test public void testAddAndSubtract(){ //add the behavior to add numbers EasyMock.expect(calcService.add(20.0,10.0)).andReturn(30.0); //subtract the behavior to subtract numbers EasyMock.expect(calcService.subtract(20.0,10.0)).andReturn(10.0); //activate the mock EasyMock.replay(calcService); //test the subtract functionality Assert.assertEquals(mathApplication.subtract(20.0, 10.0),10.0,0); //test the add functionality Assert.assertEquals(mathApplication.add(20.0, 10.0),30.0,0); //verify call to calcService is made or not EasyMock.verify(calcService); } }
Шаг 4: Выполнить контрольные примеры
Создайте файл Java-класса с именем TestRunner в C: \> EasyMock_WORKSPACE для выполнения тестовых наборов .
TestRunner.java
import org.junit.runner.JUnitCore; import org.junit.runner.Result; import org.junit.runner.notification.Failure; public class TestRunner { public static void main(String[] args) { Result result = JUnitCore.runClasses(MathApplicationTester.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } System.out.println(result.wasSuccessful()); } }
Шаг 5: Проверьте результат
Скомпилируйте классы, используя компилятор javac следующим образом:
C:\EasyMock_WORKSPACE>javac MathApplicationTester.java
Теперь запустите Test Runner, чтобы увидеть результат:
C:\EasyMock_WORKSPACE>java TestRunner
Проверьте вывод.
true
EasyMock — createStrictMock
EasyMock.createStrictMock () создает макет, а также заботится о порядке вызовов методов, которые макет собирается выполнить в ходе своего действия.
Синтаксис
calcService = EasyMock.createStrictMock(CalculatorService.class);
пример
Шаг 1. Создайте интерфейс CalculatorService для предоставления математических функций.
CalculatorService.java
public interface CalculatorService { public double add(double input1, double input2); public double subtract(double input1, double input2); public double multiply(double input1, double input2); public double divide(double input1, double input2); }
Шаг 2. Создайте класс JAVA для представления MathApplication.
MathApplication.java
public class MathApplication { private CalculatorService calcService; public void setCalculatorService(CalculatorService calcService){ this.calcService = calcService; } public double add(double input1, double input2){ return calcService.add(input1, input2); } public double subtract(double input1, double input2){ return calcService.subtract(input1, input2); } public double multiply(double input1, double input2){ return calcService.multiply(input1, input2); } public double divide(double input1, double input2){ return calcService.divide(input1, input2); } }
Шаг 3: протестируйте класс MathApplication
Давайте проверим класс MathApplication, введя в него макет calculatorService. Макет будет создан EasyMock.
Здесь мы добавили два ложных вызова методов add () и subtract () к ложному объекту с помощью метода wait (). Однако во время тестирования мы вызывали subtract () перед вызовом add (). Когда мы создаем фиктивный объект с помощью EasyMock.createStrictMock (), порядок выполнения метода имеет значение.
MathApplicationTester.java
import org.easymock.EasyMock; import org.easymock.EasyMockRunner; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @RunWith(EasyMockRunner.class) public class MathApplicationTester { private MathApplication mathApplication; private CalculatorService calcService; @Before public void setUp(){ mathApplication = new MathApplication(); calcService = EasyMock.createStrictMock(CalculatorService.class); mathApplication.setCalculatorService(calcService); } @Test public void testAddAndSubtract(){ //add the behavior to add numbers EasyMock.expect(calcService.add(20.0,10.0)).andReturn(30.0); //subtract the behavior to subtract numbers EasyMock.expect(calcService.subtract(20.0,10.0)).andReturn(10.0); //activate the mock EasyMock.replay(calcService); //test the subtract functionality Assert.assertEquals(mathApplication.subtract(20.0, 10.0),10.0,0); //test the add functionality Assert.assertEquals(mathApplication.add(20.0, 10.0),30.0,0); //verify call to calcService is made or not EasyMock.verify(calcService); } }
Шаг 4: Выполнить контрольные примеры
Создайте файл Java-класса с именем TestRunner в C: \> EasyMock_WORKSPACE для выполнения тестовых наборов .
TestRunner.java
import org.junit.runner.JUnitCore; import org.junit.runner.Result; import org.junit.runner.notification.Failure; public class TestRunner { public static void main(String[] args) { Result result = JUnitCore.runClasses(MathApplicationTester.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } System.out.println(result.wasSuccessful()); } }
Шаг 5: Проверьте результат
Скомпилируйте классы, используя компилятор javac следующим образом:
C:\EasyMock_WORKSPACE>javac MathApplicationTester.java
Теперь запустите Test Runner, чтобы увидеть результат:
C:\EasyMock_WORKSPACE>java TestRunner
Проверьте вывод.
testAddAndSubtract(com.tutorialspoint.mock.MathApplicationTester): Unexpected method call CalculatorService.subtract(20.0, 10.0): CalculatorService.add(20.0, 10.0): expected: 1, actual: 0 false
EasyMock — createNiceMock
EasyMock.createNiceMock () создает макет и задает реализацию по умолчанию для каждого метода макета. Если используется EasyMock.createMock (), то вызов метода mock приводит к ошибке подтверждения.
Синтаксис
calcService = EasyMock.createNiceMock(CalculatorService.class);
пример
Шаг 1: Создайте интерфейс CalculatorService для предоставления математических функций.
CalculatorService.java
public interface CalculatorService { public double add(double input1, double input2); public double subtract(double input1, double input2); public double multiply(double input1, double input2); public double divide(double input1, double input2); }
Шаг 2. Создайте класс JAVA для представления MathApplication.
MathApplication.java
public class MathApplication { private CalculatorService calcService; public void setCalculatorService(CalculatorService calcService){ this.calcService = calcService; } public double add(double input1, double input2){ return calcService.add(input1, input2); } public double subtract(double input1, double input2){ return calcService.subtract(input1, input2); } public double multiply(double input1, double input2){ return calcService.multiply(input1, input2); } public double divide(double input1, double input2){ return calcService.divide(input1, input2); } }
Шаг 3: протестируйте класс MathApplication
Давайте проверим класс MathApplication, введя в него макет calculatorService. Макет будет создан EasyMock.
Здесь мы добавили один вызов фиктивного метода, add (), через wait (). Однако во время тестирования мы вызывали subtract () и другие методы. Когда мы создаем фиктивный объект с помощью EasyMock.createNiceMock (), доступна реализация по умолчанию со значениями по умолчанию.
MathApplicationTester.java
import org.easymock.EasyMock; import org.easymock.EasyMockRunner; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @RunWith(EasyMockRunner.class) public class MathApplicationTester { private MathApplication mathApplication; private CalculatorService calcService; @Before public void setUp(){ mathApplication = new MathApplication(); calcService = EasyMock.createNiceMock(CalculatorService.class); mathApplication.setCalculatorService(calcService); } @Test public void testCalcService(){ //add the behavior to add numbers EasyMock.expect(calcService.add(20.0,10.0)).andReturn(30.0); //activate the mock EasyMock.replay(calcService); //test the add functionality Assert.assertEquals(mathApplication.add(20.0, 10.0),30.0,0); //test the subtract functionality Assert.assertEquals(mathApplication.subtract(20.0, 10.0),0.0,0); //test the multiply functionality Assert.assertEquals(mathApplication.divide(20.0, 10.0),0.0,0); //test the divide functionality Assert.assertEquals(mathApplication.multiply(20.0, 10.0),0.0,0); //verify call to calcService is made or not EasyMock.verify(calcService); } }
Шаг 4: Выполнить контрольные примеры
Создайте файл Java-класса с именем TestRunner в C: \> EasyMock_WORKSPACE для выполнения тестовых наборов .
TestRunner.java
import org.junit.runner.JUnitCore; import org.junit.runner.Result; import org.junit.runner.notification.Failure; public class TestRunner { public static void main(String[] args) { Result result = JUnitCore.runClasses(MathApplicationTester.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } System.out.println(result.wasSuccessful()); } }
Шаг 5: Проверьте результат
Скомпилируйте классы, используя компилятор javac следующим образом:
C:\EasyMock_WORKSPACE>javac MathApplicationTester.java
Теперь запустите Test Runner, чтобы увидеть результат:
C:\EasyMock_WORKSPACE>java TestRunner
Проверьте вывод.
true
EasyMock — EasyMockSupport
EasyMockSupport — это служебный или вспомогательный класс для тестовых классов. Он обеспечивает следующие функциональные возможности:
-
replayAll () — регистрирует все созданные макеты в одном пакете.
-
verifyAll () — Проверяет все ложные операции в одном пакете.
-
resetAll () — Сбрасывает все макетные операции в одном пакете.
replayAll () — регистрирует все созданные макеты в одном пакете.
verifyAll () — Проверяет все ложные операции в одном пакете.
resetAll () — Сбрасывает все макетные операции в одном пакете.
пример
Шаг 1. Создайте интерфейс CalculatorService для предоставления математических функций.
CalculatorService.java
public interface CalculatorService { public double add(double input1, double input2); public double subtract(double input1, double input2); public double multiply(double input1, double input2); public double divide(double input1, double input2); }
Шаг 2. Создайте класс JAVA для представления MathApplication.
MathApplication.java
public class MathApplication { private CalculatorService calcService; public void setCalculatorService(CalculatorService calcService){ this.calcService = calcService; } public double add(double input1, double input2){ return calcService.add(input1, input2); } public double subtract(double input1, double input2){ return calcService.subtract(input1, input2); } public double multiply(double input1, double input2){ return calcService.multiply(input1, input2); } public double divide(double input1, double input2){ return calcService.divide(input1, input2); } }
Шаг 3: протестируйте класс MathApplication
Давайте проверим класс MathApplication, введя в него макет calculatorService. Макет будет создан EasyMock.
MathApplicationTester.java
import org.easymock.EasyMockRunner; import org.easymock.EasyMockSupport; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @RunWith(EasyMockRunner.class) public class MathApplicationTester extends EasyMockSupport { private MathApplication mathApplication1; private MathApplication mathApplication2; private CalculatorService calcService1; private CalculatorService calcService2; @Before public void setUp(){ mathApplication1 = new MathApplication(); mathApplication2 = new MathApplication(); calcService1 = createNiceMock(CalculatorService.class); calcService2 = createNiceMock(CalculatorService.class); mathApplication1.setCalculatorService(calcService1); mathApplication2.setCalculatorService(calcService2); } @Test public void testCalcService(){ //activate all mocks replayAll(); //test the add functionality Assert.assertEquals(mathApplication1.add(20.0, 10.0),0.0,0); //test the subtract functionality Assert.assertEquals(mathApplication1.subtract(20.0, 10.0),0.0,0); //test the multiply functionality Assert.assertEquals(mathApplication1.divide(20.0, 10.0),0.0,0); //test the divide functionality Assert.assertEquals(mathApplication1.multiply(20.0, 10.0),0.0,0); //test the add functionality Assert.assertEquals(mathApplication2.add(20.0, 10.0),0.0,0); //test the subtract functionality Assert.assertEquals(mathApplication2.subtract(20.0, 10.0),0.0,0); //test the multiply functionality Assert.assertEquals(mathApplication2.divide(20.0, 10.0),0.0,0); //test the divide functionality Assert.assertEquals(mathApplication2.multiply(20.0, 10.0),0.0,0); //verify all the mocks verifyAll(); } }
Шаг 4: Выполнить контрольные примеры
Создайте файл Java-класса с именем TestRunner в C: \> EasyMock_WORKSPACE для выполнения тестовых наборов .
TestRunner.java
import org.junit.runner.JUnitCore; import org.junit.runner.Result; import org.junit.runner.notification.Failure; public class TestRunner { public static void main(String[] args) { Result result = JUnitCore.runClasses(MathApplicationTester.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } System.out.println(result.wasSuccessful()); } }
Шаг 5: Проверьте результат
Скомпилируйте классы, используя компилятор javac следующим образом:
C:\EasyMock_WORKSPACE>javac MathApplicationTester.java
Теперь запустите Test Runner, чтобы увидеть результат:
C:\EasyMock_WORKSPACE>java TestRunner
Проверьте вывод.