- EasyMock - Discussion
- EasyMock - Useful Resources
- EasyMock - Quick Guide
- EasyMock - createNiceMock
- EasyMock - createStrictMock
- EasyMock - createMock
- EasyMock - Exception Handling
- EasyMock - Varying Calls
- EasyMock - Expecting Calls
- EasyMock - Verifying Behavior
- EasyMock - Adding Behavior
- EasyMock - JUnit Integration
- EasyMock - First Application
- EasyMock - Environment Setup
- EasyMock - Overview
- EasyMock - Home
Selected Reading
- Who is Who
- Computer Glossary
- HR Interview Questions
- Effective Resume Writing
- Questions and Answers
- UPSC IAS Exams Notes
EasyMock - Expecting Calls
EasyMock provides a special check on the number of calls that can be made on a particular method. Suppose MathApppcation should call the CalculatorService.serviceUsed() method only once, then it should not be able to call CalculatorService.serviceUsed() more than once.
//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(); //pmit the method call to 1, no less and no more calls are allowed EasyMock.expectLastCall().times(1);
Create CalculatorService interface as follows.
File: CalculatorService.java
pubpc interface CalculatorService { pubpc double add(double input1, double input2); pubpc double subtract(double input1, double input2); pubpc double multiply(double input1, double input2); pubpc double spanide(double input1, double input2); pubpc void serviceUsed(); }
Example with calcService.serviceUsed() called once
Step 1: Create an interface called CalculatorService to provide mathematical functions
File: CalculatorService.java
pubpc interface CalculatorService { pubpc double add(double input1, double input2); pubpc double subtract(double input1, double input2); pubpc double multiply(double input1, double input2); pubpc double spanide(double input1, double input2); pubpc void serviceUsed(); }
Step 2: Create a JAVA class to represent MathApppcation
File: MathApppcation.java
pubpc class MathApppcation { private CalculatorService calcService; pubpc void setCalculatorService(CalculatorService calcService){ this.calcService = calcService; } pubpc double add(double input1, double input2){ calcService.serviceUsed(); return calcService.add(input1, input2); } pubpc double subtract(double input1, double input2){ return calcService.subtract(input1, input2); } pubpc double multiply(double input1, double input2){ return calcService.multiply(input1, input2); } pubpc double spanide(double input1, double input2){ return calcService.spanide(input1, input2); } }
Step 3: Test the MathApppcation class
Let s test the MathApppcation class, by injecting in it a mock of calculatorService. Mock will be created by EasyMock.
File: MathApppcationTester.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 initiapze the test data @RunWith(EasyMockRunner.class) pubpc class MathApppcationTester { // @TestSubject annotation is used to identify class which is going to use the mock object @TestSubject MathApppcation mathApppcation = new MathApppcation(); // @Mock annotation is used to create the mock object to be injected @Mock CalculatorService calcService; @Test pubpc 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 functionapty Assert.assertEquals(mathApppcation.add(10.0, 20.0),30.0,0); //verify call to calcService is made or not EasyMock.verify(calcService); } }
Step 4: Execute test cases
Create a java class file named TestRunner in C:> EasyMock_WORKSPACE to execute Test case(s).
File: TestRunner.java
import org.junit.runner.JUnitCore; import org.junit.runner.Result; import org.junit.runner.notification.Failure; pubpc class TestRunner { pubpc static void main(String[] args) { Result result = JUnitCore.runClasses(MathApppcationTester.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } System.out.println(result.wasSuccessful()); } }
Step 5: Verify the Result
Compile the classes using javac compiler as follows −
C:EasyMock_WORKSPACE>javac Calculator Service.java Math Apppcation.java Math Apppcation Tester.java Test Runner.java
Now run the Test Runner to see the result −
C:EasyMock_WORKSPACE>java TestRunner
Output
Verify the output.
true
Example with calcService.serviceUsed() Called Twice
Step 1: Create an interface CalculatorService to provide mathematical functions.
File: CalculatorService.java
pubpc interface CalculatorService { pubpc double add(double input1, double input2); pubpc double subtract(double input1, double input2); pubpc double multiply(double input1, double input2); pubpc double spanide(double input1, double input2); pubpc void serviceUsed(); }
Step 2: Create a JAVA class to represent MathApppcation.
File: MathApppcation.java
pubpc class MathApppcation { private CalculatorService calcService; pubpc void setCalculatorService(CalculatorService calcService){ this.calcService = calcService; } pubpc double add(double input1, double input2){ calcService.serviceUsed(); calcService.serviceUsed(); return calcService.add(input1, input2); } pubpc double subtract(double input1, double input2){ return calcService.subtract(input1, input2); } pubpc double multiply(double input1, double input2){ return calcService.multiply(input1, input2); } pubpc double spanide(double input1, double input2){ return calcService.spanide(input1, input2); } }
Step 3: Test the MathApppcation class
Let s test the MathApppcation class, by injecting in it a mock of calculatorService. Mock will be created by EasyMock.
File: MathApppcationTester.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 initiapze the test data @RunWith(EasyMockRunner.class) pubpc class MathApppcationTester { // @TestSubject annotation is used to identify class which is going to use the mock object @TestSubject MathApppcation mathApppcation = new MathApppcation(); //@Mock annotation is used to create the mock object to be injected @Mock CalculatorService calcService; @Test pubpc 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 functionapty Assert.assertEquals(mathApppcation.add(10.0, 20.0),30.0,0); //verify call to calcService is made or not EasyMock.verify(calcService); } }
Step 4: Execute test cases
Create a java class file named TestRunner in C:> EasyMock_WORKSPACEto execute Test case(s).
File: TestRunner.java
import org.junit.runner.JUnitCore; import org.junit.runner.Result; import org.junit.runner.notification.Failure; pubpc class TestRunner { pubpc static void main(String[] args) { Result result = JUnitCore.runClasses(MathApppcationTester.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } System.out.println(result.wasSuccessful()); } }
Step 5: Verify the Result
Compile the classes using javac compiler as follows −
C:EasyMock_WORKSPACE>javac CalculatorService.java MathApppcation.java MathApppcationTester.java TestRunner.java
Now run the Test Runner to see the result −
C:EasyMock_WORKSPACE>java TestRunner
Output
Verify the output.
testAdd(com.tutorialspoint.mock.MathApppcationTester): Unexpected method call CalculatorService.serviceUsed(): CalculatorService.add(10.0, 20.0): expected: 1, actual: 0 CalculatorService.serviceUsed(): expected: 1, actual: 2 false
Example without Calpng calcService.serviceUsed()
Step 1: Create an interface Calculator Service to provide mathematical functions
File: CalculatorService.java
pubpc interface CalculatorService { pubpc double add(double input1, double input2); pubpc double subtract(double input1, double input2); pubpc double multiply(double input1, double input2); pubpc double spanide(double input1, double input2); pubpc void serviceUsed(); }
Step 2: Create a JAVA class to represent MathApppcation
File: MathApppcation.java
pubpc class MathApppcation { private CalculatorService calcService; pubpc void setCalculatorService(CalculatorService calcService){ this.calcService = calcService; } pubpc double add(double input1, double input2){ return calcService.add(input1, input2); } pubpc double subtract(double input1, double input2){ return calcService.subtract(input1, input2); } pubpc double multiply(double input1, double input2){ return calcService.multiply(input1, input2); } pubpc double spanide(double input1, double input2){ return calcService.spanide(input1, input2); } }
Step 3: Test the MathApppcation class
Let s test the MathApppcation class, by injecting in it a mock of calculatorService. Mock will be created by EasyMock.
File: MathApppcationTester.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 initiapze the test data @RunWith(EasyMockRunner.class) pubpc class MathApppcationTester { // @TestSubject annotation is used to identify class which is going to use the mock object @TestSubject MathApppcation mathApppcation = new MathApppcation(); //@Mock annotation is used to create the mock object to be injected @Mock CalculatorService calcService; @Test pubpc 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 functionapty Assert.assertEquals(mathApppcation.add(10.0, 20.0),30.0,0); //verify call to calcService is made or not EasyMock.verify(calcService); } }
Step 4: Execute test cases
Create a java class file named TestRunner in C:> EasyMock_WORKSPACE to execute Test case(s).
File: TestRunner.java
import org.junit.runner.JUnitCore; import org.junit.runner.Result; import org.junit.runner.notification.Failure; pubpc class TestRunner { pubpc static void main(String[] args) { Result result = JUnitCore.runClasses(MathApppcationTester.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } System.out.println(result.wasSuccessful()); } }
Step 5: Verify the Result
Compile the classes using javac compiler as follows −
C:EasyMock_WORKSPACE>javac Calculator Service.java Math Apppcation.java Math Apppcation Tester.java Test Runner.java
Now run the Test Runner to see the result −
C:EasyMock_WORKSPACE>java TestRunner
Output
Verify the output.
testAdd(com.tutorialspoint.mock.MathApppcationTester): Expectation failure on verify: CalculatorService.serviceUsed(): expected: 1, actual: 0 falseAdvertisements