测试摘要类,该类扩展了另一个类



我有一个抽象类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;
        }  
    }
}

使用这种方法,您可以轻松模拟抽象方法并在抽象类中测试非抽象方法。当然,不利的一面是,您必须板条的一个假测试类,该类别是您的抽象课程。但是我认为这不是一个大问题。

相关内容

  • 没有找到相关文章

最新更新