Dependency injection 使用PowerMock&;莫基托

Dependency injection 使用PowerMock&;莫基托,dependency-injection,mockito,powermock,Dependency Injection,Mockito,Powermock,如何使用PowerMock&Mockito为下面的类创建JUnit测试用例。 我想要注入的类是最后一个类,所以我需要使用PowerMock来模拟它。 还要注意,我更喜欢使用DI而不是setter来注入它 import javax.inject.Inject; public class ObjectA { // Use DI to Inject a mock for this 'final' class @Inject private ObjectB objectB;

如何使用PowerMock&Mockito为下面的类创建JUnit测试用例。 我想要注入的类是最后一个类,所以我需要使用PowerMock来模拟它。 还要注意,我更喜欢使用DI而不是setter来注入它

import javax.inject.Inject;

public class ObjectA {

    // Use DI to Inject a mock for this 'final' class
    @Inject
    private ObjectB objectB;

    public ObjectA() {
    }

    public void someMethod() {
        if (null == this.objectB) {
            throw new IllegalStateException("Failed to inject ObjectB");
        }

        this.objectB.someOtherMethod();
    }
}

此时不需要PowerMock。莫基托可以做所有的工作

public class ObjectATest
{
    @Mock
    private ObjectB objectB;

    @InjectMocks
    private ObjectA objectA;

    @Before
    public void setup()
    {
        MockitoAnnotations.initMocks(this);
    }

    @Test
    public void test()
    {
        try
        {
            objectA.someMethod();
        }
        catch(IllegalStateException e)
        {
            Assert.fail();
        }
    }
}
你可以使用这个类。例如,假设您创建了一个名为
objectBMock
ObjectB
模拟,以及一个名为
ObjectA
ObjectA
实例:

Whitebox.setInternalState(objectA, objectBMock);

这将“注入”
objectBMock
objectA

问题是Mockito无法模拟最终的类object如果您同意您的答案不正确,您可以成功删除它。