Easymock 简明教程
EasyMock - createNiceMock
EasyMock.createNiceMock() 创建一个模拟,并为模拟的每个方法设置默认实现。如果使用了 EasyMock.createMock(),那么调用模拟方法会抛出断言错误。
EasyMock.createNiceMock() creates a mock and sets the default implementation of each method of the mock. If EasyMock.createMock() is used, then invoking the mock method throws assertion error.
Example
Step 1: Create an interface called CalculatorService to provide mathematical functions.
Step 1: Create an interface called CalculatorService to provide mathematical functions.
文件: CalculatorService.java
File: 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);
}
Step 2: Create a JAVA class to represent MathApplication
Step 2: Create a JAVA class to represent MathApplication
文件: MathApplication.java
File: 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);
}
}
Step 3: Test the MathApplication class
Step 3: Test the MathApplication class
让我们测试 MathApplication 类,并注入一个 calculatorService 模拟。模拟将由 EasyMock 创建。
Let’s test the MathApplication class, by injecting in it a mock of calculatorService. Mock will be created by EasyMock.
这里我们通过 expect() 添加了一个模拟方法调用 add()。然而,在测试期间,我们还调用了 subtract() 和其他方法。当我们使用 EasyMock.createNiceMock() 创建模拟对象时,可以使用具有默认值的默认实现。
Here we’ve added one mock method call, add(), via expect(). However during testing, we’ve called subtract() and other methods as well. When we create a mock object using EasyMock.createNiceMock(), the default implementation with default values are available.
文件: MathApplicationTester.java
File: 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);
}
}
Step 4: Execute test cases
Step 4: Execute test cases
在 *C:\> EasyMock_WORKSPACE * 中创建一个名为 TestRunner 的 Java 类文件来执行测试用例。
Create a java class file named TestRunner in*C:\> EasyMock_WORKSPACE * to execute Test case(s).
文件: TestRunner.java
File: TestRunner.java
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;import org.junit.runner.notification.Failure;
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现在运行测试运行器以查看结果 −C:\EasyMock_WORKSPACE>java TestRunner
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()); } } Step 5: Verify the Result Compile the classes using javac compiler as follows − C:\EasyMock_WORKSPACE>javac MathApplicationTester.java Now run the Test Runner to see the result − C:\EasyMock_WORKSPACE>java TestRunner