测试扩展另一个类的抽象类
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了测试扩展另一个类的抽象类相关的知识,希望对你有一定的参考价值。
我有一个抽象类B,它扩展了另一个抽象类A.在抽象类A中,我有保护方法转换。我想测试方法foo,它从没有实现的基类调用方法转换。如果我无法更改转换方法签名,我如何模拟方法转换。
abstract class B extends A {
public void foo(Object someObject) {
Object convertedObject = convert(someObject);
//logic for testing
}
}
abstract class A {
protected abstract Object convert(Object some object);
}
我使用Mockito.spy()来调用实际方法,但转换方法不适用于模拟(通过Mockito.when(...)。thenReturn(...)因为它受到保护。
B b = Mockito.spy(B.class);
告诉我如何测试方法foo。
答案
Mockito
不能模拟抽象类。但是你可以有一个子类用于你的测试目的,它实现你的类B
然后监视它。
@RunWith(MockitoJUnitRunner.class)
public class BTest {
@InjectMocks
@Spy
private FakeB b;
@Test
public void testSomething() {
when(b.convert(any())).thenReturn(something);
}
public static class FakeB extends B {
protected Object convert(Object someobject) {
return null;
}
}
}
使用这种方法,您可以轻松地模拟抽象方法并在抽象类中测试非抽象方法。当然,缺点是你需要创建一个假抽象类的子类。但我认为这应该不是一个大问题。
以上是关于测试扩展另一个类的抽象类的主要内容,如果未能解决你的问题,请参考以下文章
如何从同一个类中的另一个构造函数调用抽象类的构造函数(方法重载)[重复]