Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

logger.info is throwing null pointer exception when whole maven project is run under junit test

Here is the example code

class Temp
{
    public static int someMethod()
    {
        Logger logger = LoggerFactory.getLogger(Temp.class);
        logger.info("Some information");//NullPointerException
        return 0;
    }
}

class ClassToTest
{
    public int methodToTest()
    {
        Temp tempInstance = new Temp();
        int i = temp.someMethod();
        return i;
    }
}

class TestAClass
{
    ClassToTest classToTestInstance;
    @Before
    public void setUp()
    {
        classToTestInstance = new ClassToTest();
    }
    @Test
    public void testMethodToTest()
    {
        int i = classToTest.methodToTest();
    }
}

This is a sceneario. This test case may pass. But in actual code when I run the individual test cases or run the whole test class, Test case passes but when I run the maven project under junit test It fails with NullPointerException. I can not post actual code because it is a proprietary code. Please guide me if someone has faced this type of issue.

Stack trace which I am getting when I run my actual code:

java.lang.NullPointerException
    at org.slf4j.impl.Log4jLoggerAdapter.info(Log4jLoggerAdapter.java:304)
    at Temp
    at ClassToTest
    at TestAClass
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
    at mockit.integration.junit4.internal.JUnit4TestRunnerDecorator.executeTestMethod(JUnit4TestRunnerDecorator.java:142)
    at mockit.integration.junit4.internal.JUnit4TestRunnerDecorator.invokeExplosively(JUnit4TestRunnerDecorator.java:71)
    at mockit.integration.junit4.internal.MockFrameworkMethod.invokeExplosively(MockFrameworkMethod.java:40)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
like image 930
वरुण Avatar asked Mar 18 '23 05:03

वरुण


2 Answers

This problem was due to because logger was static in Temp class. If instance of Temp class is created in another test class earlier so it can not load the logger for the temp class because it is already loaded. So when we run the whole project under junit test it fails. Because logger for Temp class is somewhere in other test class is already loaded. This problem is resolved by mocking the logger with JMockit. @SubOptimal Thank you for giving time.

like image 129
वरुण Avatar answered Mar 26 '23 03:03

वरुण


I got this exception when the Logger object was not static in the class by mistake.

like image 23
Fakrudeen Avatar answered Mar 26 '23 01:03

Fakrudeen