我目前面临以下测试用例: 我想从akka模拟抽象的ActorRef类:
@RunWith(MockitoJUnitRunner.class)
public class ConstraintBuilderTest {
@Mock
ClassANeededByClassB a;
@InjectMock
ClassB b;
@Before
public void setUp(){
Mockito.when(a.equals(a)).thenReturn(true);
}
//tests go here
}
我知道mockito页面说它无法模拟等于。那么有关于如何模仿的想法吗?
ClassB上的equals方法使用ClassANeededByClassB来检查它的相等性。
我能想到的是在模拟的班级中注入一个b。如何最好地进行?
请注意,这些类来自一个我无法更改的框架,因此我无法更改其代码以添加setter或类似的东西。
答案 0 :(得分:3)
b
是一个模拟,所以你不需要注入任何东西。毕竟它没有执行任何真正的方法(除非你通过调用thenCallRealMethod
明确地这样做),所以没有必要注入任何ClassANeededByClassB
的实现。
如果ClassB
是受测试的类或间谍,那么您需要使用@InjectMocks
注释,它会将任何匹配的模拟注入ClassB
。
@RunWith(MockitoJUnitRunner.class)
public class ConstraintBuilderTest {
@Mock
ClassANeededByClassB a;
@InjectMocks
ClassB b;
// ...
}
正如你所说,Mockito不支持嘲笑equals
。可能有一些解决方法,但我不知道。所以这里只是对它的一些想法: