EasyMock - Thêm hành vi
EasyMock thêm một chức năng vào một đối tượng giả sử dụng các phương thức expect() và expectLassCall(). Hãy xem đoạn mã sau.
//add the behavior of calc service to add two numbers
EasyMock.expect(calcService.add(10.0,20.0)).andReturn(30.00);
Ở đây chúng tôi đã hướng dẫn EasyMock đưa ra hành vi thêm 10 và 20 vào phương thức add của calcService và kết quả là trả về giá trị 30,00.
Tại thời điểm này, Mock chỉ đơn giản là ghi lại hành vi nhưng nó không hoạt động như một đối tượng giả. Sau khi gọi phát lại, nó hoạt động như mong đợi.
//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);
Ví dụ không có EasyMock.Replay ()
Step 1: Create an interface called CalculatorService to provide mathematical functions
Tệp: 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
Tệp: 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
Hãy kiểm tra lớp MathApplication, bằng cách đưa vào nó một mô hình của CalculatorService. Mock sẽ được tạo bởi EasyMock.
Tệp: 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);
}
}
Step 4: Execute test cases
Tạo tệp lớp java có tên TestRunner trong C:\>EasyMock_WORKSPACE để thực thi (các) trường hợp thử nghiệm.
Tệp: 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());
}
}
Step 5: Verify the Result
Biên dịch các lớp bằng cách sử dụng javac trình biên dịch như sau:
C:\EasyMock_WORKSPACE>javac Calculator Service.java Math Application.java Math Application Tester.java Test Runner.java
Bây giờ hãy chạy Trình chạy thử nghiệm để xem kết quả:
C:\EasyMock_WORKSPACE>java TestRunner
Xác minh kết quả đầu ra.
testAdd(MathApplicationTester): expected:<0.0> but was:<30.0>
false
Ví dụ với EasyMock.Replay ()
Step 1: Create an interface called CalculatorService to provide mathematical functions.
Tệp: 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.
Tệp: 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
Hãy kiểm tra lớp MathApplication, bằng cách đưa vào nó một mô hình của CalculatorService. Mock sẽ được tạo bởi EasyMock.
Tệp: 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);
}
}
Step 4: Execute test cases
Tạo tệp lớp java có tên TestRunner trong C:\>EasyMock_WORKSPACE để thực thi (các) trường hợp Kiểm thử.
Tệp: 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());
}
}
Step 5: Verify the Result
Biên dịch các lớp bằng cách sử dụng javac trình biên dịch như sau:
C:\EasyMock_WORKSPACE>javac Calculator Service.java Math Application.java Math Application Tester.java Test Runner.java
Bây giờ chạy Test Runner để xem kết quả.
C:\EasyMock_WORKSPACE>java TestRunner
Xác minh kết quả đầu ra.
true