2011-03-08 124 views
4

我有一个方法 - getSomethingAmount()在某些类(类A)我想测试。这个 getSomethingAmount()方法逻辑取决于Set bSet,它是在类A初始化的构造函数中传递的 。例如,如果 设置bSet包含2个对象Status.OK,当getSomethingAmount()必须 返回2.我怎样才能正确验证这种情况与 Mockito?用Mockito验证的正确方法

现在我接头2 B级类型的对象,把它们放进BSET,然后断言 getSomethingAmount()方法,结果使用JUnit断言 - 它的工作原理, 但它并不在我看来像“真”这样的Mockito。

回答

1

从您对预期行为的描述中,听起来像是以相当稳定的方式对单元测试方法进行测试。通过“真正的Mockito方式”我想你想的是一样的东西:

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

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

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()); 
相关问题