抽象类是一种不能被实例化的类,它通常包含一些抽象方法,这些方法需要在子类中被实现。对抽象类进行单元测试可能会比较复杂,因为抽象类本身不能直接被实例化。使用存根(Stub)是一种常见的技术,用于模拟抽象类的行为,从而进行单元测试。
假设我们有一个抽象类 AbstractCalculator
,其中包含一个抽象方法 calculate
:
public abstract class AbstractCalculator {
public abstract int calculate(int a, int b);
}
我们可以创建一个子类 AdditionCalculator
:
public class AdditionCalculator extends AbstractCalculator {
@Override
public int calculate(int a, int y) {
return a + b;
}
}
为了对 AdditionCalculator
进行单元测试,我们可以使用存根来模拟 AbstractCalculator
的行为。以下是一个使用 JUnit 和 Mockito 的示例:
import static org.mockito.Mockito.*;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
public class AdditionCalculatorTest {
@Test
public void testCalculate() {
// 创建抽象类的存根
AbstractCalculator stub = Mockito.mock(AbstractCalculator.class);
when(stub.calculate(2, 3)).thenReturn(5);
// 创建子类实例,并注入存根
AdditionCalculator calculator = new AdditionCalculator();
calculator.setAbstractCalculator(stub);
// 调用被测试的方法
int result = calculator.calculate(2, 3);
// 验证结果
assertEquals(5, result);
}
}
when(...).thenReturn(...)
方法定义存根的行为。通过以上方法,可以有效地对抽象类及其子类进行单元测试,确保代码的正确性和可靠性。
领取专属 10元无门槛券
手把手带您无忧上云