gpt4 book ai didi

java - 测试扩展另一个类的抽象类

转载 作者:行者123 更新时间:2023-11-30 06:22:06 24 4
gpt4 key购买 nike

我有一个抽象类B,它扩展了另一个抽象类A。在抽象类A中,我有 protected 方法convert。我想测试方法 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 (...) 因为它是 protected 。

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;
}
}
}

通过这种方法,您可以轻松模拟抽象方法并测试抽象类中的非抽象方法。当然,缺点是您必须创建一个假的测试类来对您的抽象类进行子类型化。但我认为这应该不是什么大问题。

关于java - 测试扩展另一个类的抽象类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47907900/

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