Error in junit while mocking

后端 未结 2 819
鱼传尺愫
鱼传尺愫 2020-12-18 13:00

I am new to Junit,Below is the junit code which i am running.

package com.de.base.util.general;
import static org.junit.Assert.*;
import static org.mockito.M         


        
2条回答
  •  醉酒成梦
    2020-12-18 13:26

    You don't use the PowerMock runner :

    @RunWith(PowerMockRunner.class)
    

    Mockito cannot mock static method but PowerMock does.

    And you should mock the class with static method :

    PowerMockito.mockStatic(CollectionUtil.class);
    

    Anyway a better design is replacing the static method by an instance method.
    Static methods are not naturally testable and force to create complex and not readable workaround.
    For example, look at the complexity of the mix of dependencies required to test a simple class.

    You should keep the use of static methods as helper that don't perform core logic of the domain and that don't need to be mocked.

    When the methods perform core logic of the domain as it is the case for the createHashMap() static method, you very probably need to mock it to not create side effects between dependent classes during the tests.
    And as you have noticed : mocking static methods is really clumsy as static methods are really not designed to be overriden.

    Besides, for core logic of the domain, you should have the ability to take advantage of the OOP (inheritancy, polymorphism, design patterns, etc... ), how to achieve it with static methods ? –

    For legacy code we cannot really not change, it is acceptable but otherwise, no it doesn't and you should refactor your code.

提交回复
热议问题