EasyMock验证
时间:2020-02-23 14:41:19 来源:igfitidea点击:
EasyMock Verify方法用于验证是否调用了所有存根方法,并且在模拟对象上没有意外调用。
EasyMock验证
EasyMock verify()方法具有与调用verifyRecording(Object)和verifyUnexpectedCalls(Object)方法相同的效果。
让我们看一下EasyMock verify()方法的简单示例。
package com.theitroad.easymock;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.mock;
import static org.easymock.EasyMock.replay;
import static org.easymock.EasyMock.verify;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.util.ArrayList;
import org.junit.jupiter.api.Test;
public class EasyMockVerifyExample {
@Test
public void test() {
ArrayList<Integer> mockList = mock(ArrayList.class);
expect(mockList.add(10)).andReturn(true);
expect(mockList.add(20)).andReturn(true);
expect(mockList.size()).andReturn(2);
expect(mockList.get(0)).andReturn(10);
replay(mockList);
mockList.add(10);
mockList.add(20);
assertTrue(mockList.get(0) == 10);
assertEquals(mockList.size(), 2);
verify(mockList);
}
}
注意,所有存根方法都在replay()方法之后被调用。
如果我们不调用存根方法怎么办?
它将引发AssertionError。
例如,如果我注释" mockList.add(10)"语句,那么下面的异常堆栈跟踪将由JUnit报告。
java.lang.AssertionError: Expectation failure on verify: ArrayList.add(10 (int)): expected: 1, actual: 0 at org.easymock.internal.MocksControl.verify(MocksControl.java:284) at org.easymock.EasyMock.verify(EasyMock.java:2041) at com.theitroad.easymock.EasyMockVerifyExample.test(EasyMockVerifyExample.java:31)
EasyMock使用Nice Mock验证意外呼叫
如果模拟对象是一个不错的模拟对象,那么verify()方法将不会因意外的方法调用而引发错误。
但是,如果未调用存根调用,它将引发错误。
下面的测试代码片段将以绿色传递,因为模拟对象是不错的模拟对象。
ArrayList<Integer> mockList = mock(MockType.NICE, ArrayList.class); replay(mockList); mockList.add(10); //unexpected method call verify(mockList);
EasyMock verify()复杂示例
我们可以将EasyMock verify()方法移至@After方法,以确保调用了所有存根方法。
package com.theitroad.easymock;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.mock;
import static org.easymock.EasyMock.replay;
import static org.easymock.EasyMock.verify;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.util.ArrayList;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
public class EasyMockVerifyRealExample {
ArrayList<Integer> mockList;
@BeforeEach
public void setup() {
mockList = mock(ArrayList.class);
}
@Test
public void test() {
expect(mockList.add(10)).andReturn(true);
expect(mockList.get(0)).andReturn(10);
replay(mockList);
mockList.add(10);
assertTrue(mockList.get(0) == 10);
}
@AfterEach
public void teardown() {
verify(mockList);
}
}

