我有一个抽象类B,该类B延长了另一个抽象类A。我想测试从没有实现的基类转换转换的方法。如果无法更改转换方法签名,我如何模拟方法转换。
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);
}
i使用mockito.spy()来调用真实方法,但是转换方法不可用于模拟(通过mockito.then(...)。
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;
}
}
}
使用这种方法,您可以轻松模拟抽象方法并在抽象类中测试非抽象方法。当然,不利的一面是,您必须板条的一个假测试类,该类别是您的抽象课程。但是我认为这不是一个大问题。