[英]Inject mocks in mocked abstract class
我有一个抽象类,其中包含具体方法中的逻辑:
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
注释的字段上,我如何在抽象类中注入模拟依赖项?
为了回复注释,我最初想在抽象类中测试具体方法的行为,因为在调用实现之前,此方法必须做一些工作(使用提供的依赖项)。 为了测试这种行为,我要么必须在每个实现中编写测试(可以有很多实现),要么通过抽象类测试一次。 我最终使用了第一个解决方案:创建一个匿名内部类作为抽象类的实现。 谢谢。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.