【问题标题】:Dependency Injection with PowerMock & Mockito使用 PowerMock 和 Mockito 进行依赖注入
【发布时间】:2014-06-06 10:23:50
【问题描述】:

如何使用 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();
    }
}

【问题讨论】:

    标签: dependency-injection mockito powermock


    【解决方案1】:

    此时不需要 PowerMock。 Mockito 可以完成所有工作。

    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();
            }
        }
    }
    

    【讨论】:

    • 问题是Mockito不能模拟最终类ObjectB
    • 如果您同意您的答案不正确,您可以成功删除。
    【解决方案2】:

    您可以使用Whitebox 类。例如,假设您创建了一个名为 objectBMockObjectB 模拟和一个名为 objectAObjectA 实例:

    Whitebox.setInternalState(objectA, objectBMock);
    

    这会将objectBMock“注入”到objectA

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 2020-02-01
      • 1970-01-01
      • 2015-09-26
      • 2014-01-19
      • 2014-03-25
      • 2019-11-21
      相关资源
      最近更新 更多