正确的方式来验证Mockito

时间:2011-03-08 08:17:06

标签: unit-testing mockito

我有一个方法 - 某些类(A类)中的getSomethingAmount()我想测试。这个 getSomethingAmount()方法逻辑依赖于Set bSet,即 在A类初始化中传递给构造函数。例如,如果 当getSomethingAmount()必须时,使用Status.OK设置bSet包含2个对象 返回2.如何正确验证此条件 Mockito?

现在我将2个B类类型对象存根,将它们放入bSet然后断言 使用JUnit断言得到getSomethingAmount()方法 - 它有效, 但它看起来并不像“真正的”Mockito那样。

2 个答案:

答案 0 :(得分:1)

根据您对预期行为的描述,听起来非常可靠地对方法进行单元测试。通过“真正的Mockito方式”,我想你想要的是:

Set mockBSet = mock(Set.class);
stub(mockBSet.size()).toReturn(2);
A testObjectA = new A(mockBSet);
Assert.assertEquals(testObjectA.getSomethingAmount(), 2);

这是假设,Set和测试对象的初始化没有任何副作用,您希望测试考虑到这些副作用。 (例如,总是添加一些默认的“somethings”。)在这种情况下,你也可以省略存根并断言测试中的方法返回一个等于集合大小的值。

答案 1 :(得分:1)

模拟集合中的对象,而不是集合。否则,如果您更改实施,测试将是脆弱的并且中断。例如,如果您决定需要遍历Set中的对象,而不是仅使用size-method。

B b = mock(B.class);
A target = new A(new HashSet<B>(Arrays.asList(b, b)));
Assert.assertSame(2, target.getSomethingAmount());