来自受保护抽象方法的模拟方法

Mocking method from protected abstract method

这是我的问题的详细信息。

设置:

问题:

示例代码:

B b = Mockito.mock(B.class);
A a = new A(b);
Mockito.when(b.method2()).thenReturn(MY_LIST);

示例代码:

a.method1();

PS:class C 受到保护,Class A 与 class B 和 C 在不同的包中。

我看到您在测试中使用了 Mockito。我最近在一个项目中使用了它,并用以下内容做了一个测试项目。

第一个服务 (A) 使用另一个 class (B)。

    public class Service {

    private NonStaticClass nonStatic;

    public NonStaticClass getNonStatic() {
        return nonStatic;
    }

    public void setNonStatic(NonStaticClass nonStatic) {
        this.nonStatic = nonStatic;
    }

    public int useStaticService () {
        return 2*StaticClass.staticMethod();
    }

    public Integer getLastUse () {
        return this.nonStatic.getLastUse();
    }
}

然后是(B) class:

    public class NonStaticClass {

    private Integer lastUse = new Integer(0);

    public Integer getLastUse() {
        return lastUse++;
    }
}

为了测试一切是否正常,我为其创建了一个测试。

    import static org.mockito.Mockito.when;
import junit.framework.Assert;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;

@RunWith(MockitoJUnitRunner.class)
public class TestNonStaticMock {

    private final Integer staticMethodOutput = 10;

    @Mock
    NonStaticClass mock = new NonStaticClass();

    @InjectMocks
    Service service = new Service();

    @Before
    public void before () {
        setMock();
    }

    private void setMock() {
        when(mock.getLastUse()).thenReturn(staticMethodOutput);
    }

    @Test
    public void mockNonStaticMethod () {
        Integer result = service.getLastUse();
        System.out.println(result.toString());

        Assert.assertEquals(staticMethodOutput, result);
    }
}

希望对你有用