gpt4 book ai didi

java - 使用子类测试抽象类中的具体方法

转载 作者:行者123 更新时间:2023-12-02 08:56:57 24 4
gpt4 key购买 nike

abstract class BaseClass{

private final Dependency dep;

BaseClass(final Dependency dep){
this.dep = dep;
}
abstract void toBeImplementedBySubclasses();

public int concreteMethod(){
//Do some processing
return any_integer;
}
}
class DerivedOne{

@Inject
DerivedOne(final Dependency dep){
super(dep);
}

public void toBeImplementedBySubclasses(){
//DO SOMETHING RELEVANT TO DERIVED ONE IMPLEMENTATION
}
}
class DerivedTwo{

@Inject
DerivedOne(final Dependency dep){
super(dep);
}

public void toBeImplementedBySubclasses(){
//DO SOMETHING RELEVANT TO DERIVED TWO IMPLEMENTATION
}
}

我想测试抽象类中的具体方法。如果我在两个派生类的单元测试中测试基类中的具体方法是否可以,或者还有其他方法吗?

因此,如果为 DerivedOne 类编写测试,它将包括对所有方法以及基类的具体方法的测试。我知道有一个东西“Mockito.CALLS_REAL_METHODS”,我们可以用它来测试抽象类,但就我而言,我的基类有一些依赖项,我使用派生类的 super() 内部构造函数初始化/注入(inject)这些依赖项,所以我不能使用 CALLS_REALS_METHODS 执行此操作

最佳答案

这里立即浮现出两个选项。

首先,您可以编写一个抽象测试类,它处理这些方法的测试,然后具体实现的测试类完成其余的工作。例如:

public abstract class YourAbstractClassTest {

protected abstract YourAbstractClass getInstance();

@Test
public void testThing() {
final YourAbstractClass instance = this.getInstance();
instance.callMethod();

Assertions.assertTrue(instance.someProperties());
}
}

旁边:

public class ConcreteSubclassTest extends YourAbstractClassTest {
private final ConcreteSubclass instance = new ConcreteSubclass();

@Override
protected YourAbstractClass getInstance() {
return this.instance;
}

@Test
public void moreTesting() {
this.instance.implementationSpecificMethod();
}
}
<小时/>

您还可以在测试类中为其创建一个虚拟子类:

public class AbstractClassTest {
private final AbstractClass instance = new AbstractClass() {
@Override
public void abstractMethod() {
throw new UnsupportedOperationException();
}
}

@Test
public void testThing() {
this.instance.concreteMethod();
// Just make sure this doesn't ever go near the
// methods you dummied up above...
}
}

关于java - 使用子类测试抽象类中的具体方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60439810/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com