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.