jUnit,Mockito。如何确保抽象类(模板方法)中的方法调用抽象钩子方法?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jUnit,Mockito。如何确保抽象类(模板方法)中的方法调用抽象钩子方法?相关的知识,希望对你有一定的参考价值。
我来啦:
abstract class IdentifiedEntity<E extends IdentifiedEntity> implements Cloneable {
...
public void updateWith(E that) {
if (this != that) {
if (that.isNew()) {
throw new IllegalArgumentException("Cannot update with a new entity");
}
if (this.isNew()) {
throw new IllegalStateException("Cannot update a new entity");
}
if (this.getId() != that.getId()) {
throw new IllegalArgumentException("IDs do not match");
}
doUpdateWith(that);
}
}
abstract void doUpdateWith(E that);
...
}
public final class User extends IdentifiedEntity<User> {
...
@Override
void doUpdateWith(User that) {
assert that != null;
this.name = that.name;
this.email = that.email;
System.arraycopy(that.password, 0, password, 0, password.length);
this.enabled = that.enabled;
this.caloriesPerDayLimit = that.caloriesPerDayLimit;
}
...
}
问题是我怎样才能对qazxsw poi进行单元测试,以确保它确实调用了后代中所包含的抽象qazxsw poi(是的,当然,如果我支持检查)?
那你们!
答案
创建一个虚拟子类
updateWith(...)
然后像这样测试:
doUpdateWith(...)
然而,这样的测试非常特殊。它不允许您更改方法的实现。
另一答案
在@CoronA的帮助下,我找到了答案。这里是:
class ConcreteEntity extends IdentifiedEntity<ConcreteEntity> {
@Override
void doUpdateWith(ConcreteEntity that) {
}
}
非常感谢你们!
以上是关于jUnit,Mockito。如何确保抽象类(模板方法)中的方法调用抽象钩子方法?的主要内容,如果未能解决你的问题,请参考以下文章
如何为 Rest 模板编写 Mockito Junit 测试用例?
测试类时,使用 Junit 和 Mockito 检查方法内部的工作
使用 JUnit 和 Mockito 对 DAO 类进行单元测试