EasyMock, 简单来说是一个用于运行时模拟接口对象的包. 其他的, 就不多介绍了.
最近在一个项目的集成测试中需要用到, 所以学习了一下.
在运行就正确了. 不过这只是第一步, 还要考虑在项目中如何用, 可能要为某些类抽象接口.
根据EasyMock的documentation.html, 自己写了一个接口I, 一个引用接口对象的类C, 一个测试类T.
- public interface MyInterface {
- String iMethod(String s);
- }
- public class MyClass {
- public MyClass() {}
- private MyInterface myInterface;
- public void setMyInterface(MyInterface i) { myInterface = i; }
- public String cMethod(String s) { myInterface.iMethod(s); }
- }
- public class MyClassTest {
- MyInterface mock;
- MyClass myClass;
- @Test
- public void testMyClass() {
- mock = createMock(MyInterface.class);
- myClass = new MyClass();
- myClass.setMyInterface(mock);
- // expected mock call
- mock.iMethod("Hello EasyMock");
- // real call
- myClass.cMethod("Hello EasyMock");
- // verify mock
- verify(mock);
- }
- }
接口中定义的函数有返回值, String.
原本因为一切OK了, 但是一运行就出错了:
想了一下问题可能出在return上面, 但还是先上google上搜索了一下, 找到了
http://www.squix.ch/2007-07-05/easymock-missing-behavior-definition-for-the-preceeding-method-call/.
- java.lang.IllegalStateException: missing behavior definition for the preceeding method call
和我遇到的问题一样, 果然是return的问题. 稍微修改一下:
- mock.iMethod("Hello EasyMock");
- =>
- expect(mock.iMethod("Hello EasyMock")).andReturn("XXX");