Java Testing Notes
  • Java Testing
  • Mockito
    • Mockito.mock()
    • Mockito.spy()
    • Mockito.verify()
    • Mockito.mockStatic()
    • ArgumentMatcher
    • ArgumentCaptor
  • PowerMockito
    • Why we need PowerMock?
    • PowerMockRunner
    • PrepareForTest
      • Understanding @PrepareForTest
    • SuppressStaticInitializationFor
    • PowerMockito.suppress()
    • PowerMockito.stub()
    • PowerMockito.replace()
    • PowerMockito.whenNew()
      • Limitation of PowerMockito.whenNew()
    • Whitebox.invokeMethod()
    • Whitebox.setInternalState()
    • Whitebox.getInternalState()
  • Tips
    • How to test ViewModel and LiveData
Powered by GitBook
On this page
  1. PowerMockito

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.

PreviousUnderstanding @PrepareForTestNextPowerMockito.suppress()

Last updated 2 years ago