Mockito doReturn执行Real函数,而不是仅仅返回

问题描述

我正在尝试模拟D类构造函数。但是,模拟对象将调用真实函数,而不仅仅是返回值。

底部读取。

主要

public abstract class F
{
    int hi()
    {
        throw new Exception("I always throw Exception. So don't execute me");
        return 1;
    }
}


public abstract class E extends F
{
    int hi()
    {
        return super.hi();
    }
}

public class D extends E
{

}

public class C
{
    D d_object;
    C()
    {
        d_object = new new D();      // will be mocked_d!
    }

    int hi()
    {
        d_object.hi();
    }
}

public class B
{
    void fun()
    {
        C object = new C();
        int value = object.hi();
    }`
}

测试

@RunWith(powermockrunner.class)
@powermockrunnerDelegate(SpringJunit4ClassRunner.class)
@PrepareForTest({C.class,D.class})
public class Test_B
{
    @Autowired
    A o_A;

    @Test
    public void test_method()
    {
        D mocked_D = mock(D.class);
        powermockito.whenNew(D.class).withNoArguments().then(new Answer()
        {
            @Override
            public Object answer(InvocationOnMock invocation) throws Throwable
            {
                return mocked_D;
            }
        });
        powermockito.doReturn(2).when(mocked_d).hi();
        Assert.assertEquals(2,o_A.fun()) // throws Exception. since method inside class F gets executed.
    }
}
F类中的

hi()方法总是被调用,因此引发执行。我不想调用功能。我在做错什么吗?

解决方法

使用@PrepareForTest时,我总是在测试中使用PowerMockito.mockStatic方法。