PowerMock @SuppressStaticInitializationFor不适用于测试类中的嵌套类

时间:2017-12-01 06:25:33

标签: java unit-testing powermock powermockito

我在代码库中对一个广泛使用的基类进行了更改,添加了一个静态初始化块。我现在正在进行所有的单元测试,试图通过添加

来使它们工作
@SuppressStaticInitializationFor("com.mycompany.WidelyUsedBaseClass")

这在某些情况下有效,但我无法使用具有扩展WidelyUsedBaseClass的内部类的测试类。 (不要问我为什么这些嵌套类存在;我不确定为什么标准模拟不够。无论如何,我不想尝试重构这个因为我不完全自信我理解测试逻辑使用这些内部类。)

这是我的意思的一个例子:

@RunWith(PowerMockRunner.class)
@SuppressStaticInitializationFor("com.mycompany.WidelyUsedBaseClass") // <-- This isn't working! I can still see <clinit> in the exception when the test fails...
public class SomeTestsFromAnotherTeam
{
    // test logic...
    // more test logic...
    Stub myStub = new Stub();
    // more test logic...

    private class Stub extends WidelyUsedBaseClass
    {
        // some other logic...
    }
}

我认为问题发生在new Stub()来电。

1 个答案:

答案 0 :(得分:0)

好吧,我无法确切知道发生了什么,但我确实找到了解决问题的方法。

在将内部类移到封闭类之外时,测试通过。我只是把它放在同一个文件中的SomeTestsFromAnotherTeam类后面,并使其成为私有包:

public class SomeTestsFromAnotherTeam
{
    // ...
}

class Stub extends WidelyUsedBaseClass
{
    // ...
}