【问题标题】:Unit testing singleton without using PowerMock or PowerMockito不使用 PowerMock 或 PowerMockito 的单元测试单例
【发布时间】:2017-11-16 03:22:51
【问题描述】:

我正在为单例 Java 类编写单元测试(使用 JUnit 和 Mockito)。我无法更改类实现本身。

使用 PowerMockito,它就像这样(并且有效):

@Mock
    private TheSingleton theSingleton;

@Before
    public final void setUp()
        throws Exception
    {
        MockitoAnnotations.initMocks( this );

        PowerMockito.mockStatic( TheSingleton.class );
        when( TheSingleton.getInstance() ).thenReturn( theSingleton );
        ...
    }

要求不使用使用 PowerMock 或 PowerMockito 或任何其他静态模拟 API 重写测试。由于我无法将单例类更改为使用依赖注入,因此我不确定这样做的好方法是什么。

任何帮助将不胜感激。

【问题讨论】:

    标签: java unit-testing singleton mockito powermock


    【解决方案1】:

    您基本上没有其他选择。如果没有任何类型的静态模拟框架,例如 PowerMock 或 PowerMockito,或者编写自己的代码来完成与这些框架相同的事情,您将无法做您想做的事情。抱歉,我知道这不是你想要的答案,但我相信这就是答案。

    另请参阅 How to change method behaviour through reflection?Why does Mockito not mock static methods? 了解更多信息。

    【讨论】:

      【解决方案2】:

      durian-globals 是实现此目的的无反射方式。您确实牺牲了一点运行时性能,但在我们的任何生产用例中都不是可衡量的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多