public class MainTstObjectMockitoTest { // 指定Mock的对象 @Mock private MayMockObject mayMockObject; private MainTstObject mainTstObject; @Before public void setUp() { MockitoAnnotations.initMocks(this); // 声明测试用例类 this.mainTstObject = new MainTstObject(); this.mainTstObject.setMayMockObject(this.mayMockObject); } @Test public void process() { String str1 = "Mockito返回字符串。"; String str2 = "Mockito返回字符串。"; Mockito.when(this.mayMockObject.getString(str2)).thenReturn(""); // Mock返回值 String ret = this.mainTstObject.create(str1, str2); Assert.assertEquals(ret, str1); } @After public void tearDown(){ } } |
七、最后
从两个测试用例可以看出,JMock和Mockito在用法上的一些区别:
1、对于要Mock的对象,JMock要显示指出来【this.mayMockObject = this.context.mock(MayMockObject.class);】;
而Mockito只是简单加上注释【@Mock】,然后声明下测试用例类即可【MockitoAnnotations.initMocks(this);】。
2、对于方法的模拟,JMock显得更加复杂了
this.context.checking(new Expectations() { { oneOf(mayMockObject).getString(str2); will(returnValue("")); } }); |
而Mockito只要简单的一行代码就行【Mockito.when(this.mayMockObject.getString(str2)).thenReturn("");】。
从上可以看出,Mockito的代码行更少,更加简洁,个人比较喜欢用Mockito,简洁易记!
另外需要注意的是:JMock只能Mock接口,也就是上面的例子中【MayMockObject】只能为接口,不能为实体类;而Mockito就没有这个限制。
当然,我们既然用Mock,就是因为只知接口,而不知其具体实现,这样说来,JMock只能Mock接口不能算是Mockito的一个优点了。