简体   繁体   中英

Getting PowerMock Error: java.lang.AbstractMethodError: org.powermock.api.mockito.internal.mockmaker.PowerMockMaker

I am getting PowerMock error but I am not using PowerMocking. I am using normal mocking. This is my class which I want to test:

import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class IlinqBeanDataBuilder {

    @Autowired
    private Settings settings;

    private static final String SERVICE_CODE_FOR_FACILITY_COUNTRY = "SERVICE_CODE_FOR_FACILITY_COUNTRY";
    private static final String SERVICE_CODE_A_CONSTANT = "A";

    private static final String HARD_DOWN = "HARD DOWN";
    private static final String QUICK_QUESTION = "QUICK QUESTION";
    private static final String PARTIAL_DOWN = "PARTIAL DOWN";

    private static final String COMPLETELY_DOWN = "Completely Down";
    private static final String UP = "Up";
    private static final String PARTIALLY_DOWN = "Partially Down";

    public RfsData prepareIlinqData(RequestData requestdata) throws FileNotFoundException {

        System.out.println("M into prepare illinq data");
        RfsData iLinkDataBean = new RfsData();
        iLinkDataBean.setCountryCode(requestdata.getCountryCode());
        iLinkDataBean.setSystemId(requestdata.getEquipmentID());
        iLinkDataBean.setModality(requestdata.getModality());
        /**
         * Removing the US from FacilityID In future fix need to change based on
         * some related information
         */
        iLinkDataBean.setCustomerId(requestdata.getFacilityID().substring(3));

        iLinkDataBean.setFirstname(requestdata.getName());
        iLinkDataBean.setPnumber(requestdata.getPhoneNumber());
        iLinkDataBean.setExtension(requestdata.getExtension());
        iLinkDataBean.setDescription(requestdata.getDescription());
        iLinkDataBean.setShortDescription(requestdata.getShortDescription());
        iLinkDataBean.setPeriod(requestdata.getTimePeriod());
        iLinkDataBean.setIlinq_local(requestdata.getLocale());
        iLinkDataBean.setRequestApp(requestdata.getRequestingApp());
        iLinkDataBean.setExamNum(requestdata.getExamNumber());
        iLinkDataBean.setSeriesNum(requestdata.getSeriesNumber());
        iLinkDataBean.setImageNum(requestdata.getImageNumber());
        iLinkDataBean.setRequestorSystemId(requestdata.getEquipmentID());
        iLinkDataBean.setServicecode(requestdata.getServiceCode());
        iLinkDataBean.setIsocode(requestdata.getIsoCode());
        iLinkDataBean.setProblemtype(requestdata.getProblemType());
        if (StringUtils.isNotBlank(requestdata.getEquipmentStatus())
                || StringUtils.isNotEmpty(requestdata.getEquipmentStatus())) {
            if (requestdata.getEquipmentStatus().trim().equalsIgnoreCase(HARD_DOWN)) {
                iLinkDataBean.setStatus(COMPLETELY_DOWN);
            } else if (requestdata.getEquipmentStatus().trim().equalsIgnoreCase(QUICK_QUESTION)) {
                iLinkDataBean.setStatus(UP);
            } else if (requestdata.getEquipmentStatus().trim().equalsIgnoreCase(PARTIAL_DOWN)) {
                iLinkDataBean.setStatus(PARTIALLY_DOWN);
            } else {
                iLinkDataBean.setStatus(requestdata.getEquipmentStatus());
            }
        }

        String CountryCode = iLinkDataBean.getCountryCode();
        System.out.println("Hi country code is:" + CountryCode);

        String list1 = this.settings.getString("contactge.americas.country.codes");
        System.out.println("list 1 data is:" + list1);

        String list2 = this.settings.getString("contactge.asia.country.codes");
        String list3 = this.settings.getString("contactge.europe.country.codes");
        String list4 = this.settings.getString("contactge.japan.country.codes");
        List<String> RegionList1 = Arrays.asList((list1.split(",")));
        List<String> RegionList2 = Arrays.asList((list2.split(",")));
        List<String> RegionList3 = Arrays.asList((list3.split(",")));
        List<String> RegionList4 = Arrays.asList((list4.split(",")));

        System.out.println("List1 data is:" + RegionList1);
        System.out.println("List2 data is:" + RegionList2);
        System.out.println("List3 data is:" + RegionList3);
        System.out.println("List4 data is:" + RegionList4);
        String RegionCode = null;
        if (RegionList1.contains(CountryCode)) {
            System.out.println("M in list 1");

            RegionCode = "Americas";

        } else if (RegionList2.contains(CountryCode)) {
            System.out.println("M in list 2");
            RegionCode = "ROA";
        } else if (RegionList3.contains(CountryCode)) {
            System.out.println("M in list 3");
            RegionCode = "EMEA";
        } else if (RegionList4.contains(CountryCode)) {
            System.out.println("M in list 4");
            RegionCode = "Japan";
        }

        System.out.println("Region code:" + RegionCode);
        iLinkDataBean.setRegionCode(RegionCode);
        System.out.println("ilinq data bean builder data:" + iLinkDataBean);

        // Getting regionCode from CountryCode using property file
        // iLinkDataBean.setRegionCode(RegionCode);
        System.out.println("system id----------------:" + iLinkDataBean.getSystemId());

        System.out.println("ilinq data bean builder data:" + iLinkDataBean);
        return iLinkDataBean;
    }
}

This is my test class. In this, I am mocking setting object which fetch data from database and I am doing inject mock at ILinqBeanDataBuilder.

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.mockito.runners.MockitoJUnitRunner;

import junit.framework.Assert;

@RunWith(MockitoJUnitRunner.class)
public class IlinqBeanDataBuilderTest {

    @InjectMocks
    IlinqBeanDataBuilder iLinqdata;

    @Mock
    private Settings settings;

    @Before
    public void setUp() throws Throwable {

        MockitoAnnotations.initMocks(this);

        // iLinqdata = new IlinqBeanDataBuilder();

    }

    @Test
    public void testCheckSum() throws FileNotFoundException {

        RequestData reqData = new RequestData();
        reqData.setCountryCode("123");
        reqData.setEquipmentID("414541HD01");
        reqData.setModality("sjdksd");
        reqData.setFacilityID("sdjhsdj");
        reqData.setCountryCode("CA");
        reqData.setIsoCode("2");
        reqData.setProblemType("ddddddddd");
        reqData.setProblemArea("ssbnc");
        reqData.setEquipmentStatus("sdsds");
        reqData.setName("pinku");
        reqData.setPhoneNumber("2999999999992");
        reqData.setExamNumber("12323");
        reqData.setServiceCode("sdfsfdf");
        reqData.setExtension("3473437");
        reqData.setDescription("sdsjd");
        reqData.setShortDescription("sjdks");
        reqData.setTimePeriod("01/01/2011,13:00");
        reqData.setLocale("en_US");
        reqData.setRequestingApp("icenter");
        reqData.setImageNumber("sdjsh");
        reqData.setSeriesNumber("2334");
        Mockito.when(settings.getString("contactge.americas.country.codes"))
                .thenReturn("CA,CL,MX,PR,US,AR,BR,GD,VE,CR,PE,AS,DO,HN,PA,CO,BO,GT,JM,EC,PY,UY,NI,SV");
        Mockito.when(settings.getString("contactge.asia.country.codes"))
                .thenReturn("IN,CN,AU,HK,KR,MY,SG,TW,TH,ID,PH,NZ,VN,C3,H2,DV");

        Mockito.when(settings.getString("contactge.europe.country.codes")).thenReturn(
                "AT,BE,CH,DE,ES,FI,FR,GB,IT,NL,PT,SE,UK,NO,DK,PL,RO,ZA,IE,SA,EG,HU,TR,GR,CZ,IL,AE,AL,BG,CS,CY,DZ,IS,JO,KE,KW,LB,LU,MT,MC,MA,RE,RU,SI,SK,TN,UM,AZ,BA,BJ,BY,DI,GE,GF,HR,KZ,LT,LV,MK,UA,YU,OT,NG");
        Mockito.when(settings.getString("contactge.japan.country.codes")).thenReturn("JP");

        RfsData rfs = iLinqdata.prepareIlinqData(reqData);
        System.out.println(rfs.getCountryCode());

        Assert.assertEquals("CA", rfs.getCountryCode());
    }
}

I am getting this error:

            at org.mockito.internal.creation.MockSettingsImpl.validatedSettings(MockSettingsImpl.java:167)
            at org.mockito.internal.creation.MockSettingsImpl.confirm(MockSettingsImpl.java:161)
            at org.mockito.internal.MockitoCore.mock(MockitoCore.java:54)
            at org.mockito.Mockito.mock(Mockito.java:1449)

I guess that Settings is a final class. Mockito 1.x itself cannot mock final classes and probably tries to mock them by including PowerMock - which you don't have installed.

To solve your issue, you can upgrade to at least Mockito 2.1.0 and enable the support for mocking final classes and methods . If you need to stick with an older version, either don't mock final classes, or (if you really have no other choice) give PowerMock a try.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM