Comment on page
SuppressStaticInitializationFor
If you are working with classes which have static initializers such as:
package com.example;
public class ClassWithStaticInitializer {
private static Handler mHandler = new Handler();
}
As
mHandler
belongs to ClassWithStaticInitializer.class
not instance of ClassWithStaticInitializer
, JVM will initialize this mHandler
as soon as execution starts, thus we will not get a chance to mock it with whenNew()
. In this case, we can suppress its initialization and later set its value with Whitebox
.Here is an example to suppress
mHandler
in ClassWithStaticInitializer.class
:@RunWith(PowerMockRunner.class)
@SuppressStaticInitializationFor({
"com.example.ClassWithStaticInitializer"
})
public class ClassWithStaticInitializerTest {
// now when we call
@Before
public void setup throws Exception {
// At this stage, ClassWithStaticInitializer.mHandler will be null
Whitebox.setInternalState(ClassWithStaticInitializer.class, "mHandler", mckHandler);
}
}
tip: if you see any error with StackTrace containing similar looking line
com.examlpe.ExampleClass.<clinit>
. It means there is an static initializer, just add com.examlpe.ExampleClass
in your SuppressStaticInitializationFor
annotation.Last modified 6mo ago