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); } }