首页 > 解决方案 > 您如何使用 Mockito 从扩展类测试方法?

问题描述

我有一个从 B 扩展的 A 类。B 有一个名为 doB() 的方法。

在我的测试中,我想在调用 doB() 时返回 A。

B类:

public String doB() {
    return "B";
}

A类:

public class A extends B {
    
    public String doA() {
        String A = doB();
        return A;
    }
}

在我的单元测试中,我想做类似的事情:

@Mock
private A a;

@Test
public void test() {
    when(a.doB()).thenReturn("PASS");
    a.doB();
    //check if it is "PASS"
}

但是,它在调用doB(). 这可能吗?如果不是,那么最好的测试方法是什么?

标签: javamockito

解决方案


也许更喜欢组合而不是继承。换句话说,A应该使用B而不是A扩展B。所以B成为A的合作者。

例如:

public class B {
    public String doB() {
        return "B";
    }
}
public class A {
    private B b;

    public A(B b) {
        this.b = b;
    }

    public String doA() {
        String a = b.doB();
        return a;
    }
}

所以你的单元测试看起来像:

public class MyTest {
    @Mock
    private B b;

    @InjectMocks
    private A a;

    @Test
    public void test() {
        when(b.doB()).thenReturn("PASS");
        a.doA();
        //check if it is "PASS"
    }
}

这是 TDD 如何有助于良好设计的一个示例。


推荐阅读