我对代码库中广泛使用的基类进行了更改,并添加了一个静态初始化块。我现在正在进行我们的所有单元测试,试图通过添加
来使它们起作用@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()
调用中发生的。
好吧,我无法确切弄清楚发生了什么,但是我确实找到了解决问题的方法。
测试在封闭类外部移动内部类后通过。我只是在同一文件中的SomeTestsFromAnotherTeam
类之后将其放在私有包装中:
public class SomeTestsFromAnotherTeam
{
// ...
}
class Stub extends WidelyUsedBaseClass
{
// ...
}