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
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
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
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
Проверьте вывод.