我有一个抽象类,其中包含具体方法中的逻辑:
public abstract class AbstractEventHandler implements EventHandler {
private final Dependency dependency;
public AbstractEventHandler(Dependency dependency) {
this.dependency = dependency;
}
@Override
void handleEvent(Event event) {
dependency.doSomeWork();
[...]
doHandleEvent(event);
[...]
}
@Override
void handleOtherEvent(OtherEvent otherEvent) {
dependency.doOtherWork();
[...]
doHandleOtherEvent(event);
[...]
}
protected abstract doHandleEvent(event);
protected abstract doHandleOtherEvent(event);
}
探索解决方案来测试我的抽象类:
handleEvent(event)
逻辑,但是我必须在每个具体的类中重复测试(或一次,但是在哪个类中?)PowerMock
... Mockito
实例化抽象类的实现并调用实际方法以测试具体方法中的逻辑我选择了Mockito
解决方案,因为它既快捷又简短(特别是如果抽象类包含很多抽象方法的话)。
@ExtendWith(MockitoExtension.class)
class AbstractEventHandlerTests {
@Mock
private Dependency dependency;
@InjectMocks
@Mock(answer = Answers.CALLS_REAL_METHODS)
private AbstractEventHandler abstractEventHandler;
既然在已经用@InjectMocks
注释的字段上不允许使用@Mock
,那么如何在我的抽象类中注入模拟的依赖项?
答案 0 :(得分:0)
为了回复评论,我最初想在抽象类中测试具体方法的行为,因为该方法必须在调用实现之前做一些工作(使用提供的依赖项)。为了测试这种行为,我要么必须在每个实现中编写测试(可以有很多实现),要么必须通过抽象类对其进行一次测试。 我最终使用了第一个解决方案:创建一个匿名内部类作为抽象类的实现。谢谢。