測試用例中Spring+mock的值代替不確定值

1.首先在maven裏面配置jar

<!-- https://mvnrepository.com/artifact/org.powermock/powermock-api-mockito -->
		<dependency>
		    <groupId>org.powermock</groupId>
		    <artifactId>powermock-api-mockito</artifactId>
		    <version>1.7.1</version>
		    <scope>test</scope>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.powermock/powermock-module-junit4 -->
		<dependency>
		    <groupId>org.powermock</groupId>
		    <artifactId>powermock-module-junit4</artifactId>
		    <version>1.7.1</version>
		    <scope>test</scope>
		</dependency>

2.在類裏面使用註解,如果需要mock和spring一起用需要以下內容:

@RunWith(PowerMockRunner.class)  //使用PowerMockRunner運行時 
@PowerMockRunnerDelegate(SpringJUnit4ClassRunner.class)  //委派給SpringJUnit4ClassRunner 
@PrepareForTest(VelocityFormatUtils.class)
@PowerMockIgnore({"javax.management.*"}) //忽略一些mock異常

3.代碼示例:

package com.xiaomar.bis.template;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PowerMockIgnore;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import org.powermock.modules.junit4.PowerMockRunnerDelegate;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.alibaba.fastjson.JSONObject;
import com.xiaomar.bis.utils.VelocityFormatUtils;
import com.xiaomar.bis.utils.VelocityTestUtils;
import com.xiaomar.bis.utils.VmTestConstants;

@RunWith(PowerMockRunner.class)  //使用PowerMockRunner運行時 
@PowerMockRunnerDelegate(SpringJUnit4ClassRunner.class)  //委派給SpringJUnit4ClassRunner 
@PrepareForTest(VelocityFormatUtils.class)
@PowerMockIgnore({"javax.management.*"}) //忽略一些mock異常
public class TestFxHealthConfirmProIn {
    private static final String CURRENT_TPL_NAME = "fxHealthConfirmProIn.vm";
    private static final String SERIALNO = "serialNo";
    private static final String INSURED_TOTALPREMIUM = "insured.totalPremium";
    private static final String APPLICATION_TIME = "application.time";
    private static final String PREMIUM_PAYYEARS = "premium.payYears";
    private static final String PERIOD = "period";
    private static final String INSURED_RELATIONSHIPWITHAPPLICANT = "insured.relationshipWithApplicant";
    private static final String BENEFICIARY_NAME = "beneficiary.name";
    private static final String YPREM = "yPrem";
    private static final String PREMIUM_SECURITYLINES= "premium.securityLines";
    private static final String MEDICAL_BUYCOPIES = "medical.buyCopies";
    private static final String INSURED_INSUREDAMOUNT = "insured.insuredAmount";
    private static final String NPREM = "nPrem";
    private static final String APPLICATION_NAME = "application.name";
    private static final String APPLICATION_SEX = "application.sex";
    private static final String APPLICATION_BIRTHDAY = "application.birthday";
    private static final String APPLICATION_IDTYPE = "application.idType";
    private static final String APPLICATION_IDNO = "application.idno";
    private static final String APPLICATION_VALIDATE = "application.validate";
    private static final String APPLICATION_OCCUPATION = "application.occupation";
    private static final String APPLICATION_MOBILE = "application.mobile";
    private static final String APPLICATION_EMAIL = "application.email";
    
    private static final String APPLICATION_ADDRNO = "application.addrNo";
    private static final String APPLICATION_CURRENTRESIDENCE = "application.currentResidence";
    private static final String PROVINCE = "province";
    private static final String CITY = "city";
    private static final String COUNTY = "county";
    private static final String APPLICATION_DETAILEDADDRESS = "application.detailedAddress";
    private static final String APPLICATION_POSTALCODE = "application.postalCode";
    
    private static final String INSURED_NAME = "insured.name";
    private static final String INSURED_SEX = "insured.sex";
    private static final String INSURED_BIRTHDAY = "insured.birthday";
    private static final String INSURED_IDTYPE = "insured.idType";
    private static final String INSURED_IDNO = "insured.idno";
    private static final String PROINFO_OCCCATEGORY = "proInfo.occCategory";
    
    private static final String INSURED_MOBILE = "insured.mobile";
    private static final String INSURED_EMAIL = "insured.email";
    private static final String INSURED_HEIGHT = "insured.height";
    private static final String INSURED_WEIGHT = "insured.weight";
    private static final String INSURED_CURRENTRESIDENCE = "insured.currentResidence";
    private static final String INSURED_DETAILEDADDRESS = "insured.detailedAddress";
    
    private static final String INSURED_POSTALCODE = "insured.postalCode";
    @Before
    public void beforeTest(){
        PowerMockito.mockStatic(VelocityFormatUtils.class);
        PowerMockito.when(VelocityFormatUtils.getDateFormatOne()).thenReturn("2017-10-23 14:48:27");
        JSONObject addressJson = new JSONObject();
        addressJson.put(PROVINCE, "110000");
        addressJson.put(CITY, "110100");
        addressJson.put(COUNTY, "110101");
        PowerMockito.when(VelocityFormatUtils.stringToJSON(addressJson.toJSONString())).thenReturn(addressJson);  
    }
    
    
    @Test
    public void testRegular() throws IOException {
        Map<String, String> tempMap = initTempMap("XM01","0");
        Map<String, Object> inDataMap = initInDataMap("551AF554539947FC8A08654504EDE07E","105", "539.50");
        stubExector(tempMap, inDataMap, "");
    }
    @Test
    public void testRegularHasNull() throws IOException {
        Map<String, String> tempMap = initTempMap(null,"0");
        Map<String, Object> inDataMap = initInDataMap(null,"105", "539.50");
        stubExector(tempMap, inDataMap, "HasNull");
    }
    @Test
    public void testHasEmpty() throws IOException {
        Map<String, String> tempMap = initTempMap("","0");
        Map<String, Object> inDataMap = initInDataMap("", "", "963200");
        stubExector(tempMap, inDataMap, "HasEmpty");
    }
    
    private void stubExector(Map<String, String> tempMap, Map<String, Object> inDataMap, String suffix)
            throws IOException {
        String answerPath = VelocityTestUtils.combinePath(CURRENT_TPL_NAME, suffix);
        Map<String, Object> dataMap = new HashMap<String, Object>();
        Map<String, String> fileInfo = new HashMap<>();
        fileInfo.put(VmTestConstants.ANSWER_PATH, answerPath);
        fileInfo.put(VmTestConstants.TPL_NAME, CURRENT_TPL_NAME);
        VelocityTestUtils.testVelocity(dataMap, tempMap, inDataMap, fileInfo);
    }
    
    private Map<String, String> initTempMap(String extenterpcode,String asyn){
        Map<String, String> tempMap = new HashMap<>();
        tempMap.put("extenterpcode",extenterpcode);
        tempMap.put("asyn",asyn);
        tempMap.put("thirdUrl","");
        return tempMap;
    }
    
    
    private Map<String, Object> initInDataMap(String serialNo, String period, String yPrem){
        Map<String, Object> map = new HashMap<>();
        map.put(SERIALNO,serialNo);
        map.put(INSURED_TOTALPREMIUM,"569.30");
        map.put(APPLICATION_TIME,"2017-10-18 17:01:26");
        map.put(PREMIUM_PAYYEARS,"20");
        map.put(PERIOD,period);
        map.put(INSURED_RELATIONSHIPWITHAPPLICANT,"00");
        map.put(BENEFICIARY_NAME,"Y");
        map.put(YPREM,yPrem);
        map.put(PREMIUM_SECURITYLINES,"50000");
        map.put(MEDICAL_BUYCOPIES, "1");
        map.put(NPREM, "29.80");
        map.put(APPLICATION_NAME, "王麗萍");
        map.put(APPLICATION_SEX, "1");
        map.put(APPLICATION_BIRTHDAY, "1989-10-12");
        map.put(APPLICATION_IDTYPE, "A");
        map.put(APPLICATION_TIME, "2017-10-18 17:01:26");
        map.put(APPLICATION_IDNO, "G23473216");
        map.put(APPLICATION_VALIDATE, "");
        map.put(APPLICATION_OCCUPATION, "");
        map.put(APPLICATION_MOBILE, "18817315256");
        map.put(APPLICATION_EMAIL, "[email protected]");
        map.put(APPLICATION_ADDRNO, "");
        JSONObject addressJson = new JSONObject();
        addressJson.put(PROVINCE, "110000");
        addressJson.put(CITY, "110100");
        addressJson.put(COUNTY, "110101");
        map.put(APPLICATION_CURRENTRESIDENCE, addressJson.toJSONString());
        map.put(APPLICATION_DETAILEDADDRESS, "小衚衕口");
        map.put(APPLICATION_POSTALCODE, "342300");
        map.put(INSURED_NAME, "麗澤");
        map.put(INSURED_SEX, "1");
        map.put(INSURED_BIRTHDAY, "2000-10-20");
        
        map.put(INSURED_IDTYPE, "A");
        map.put(INSURED_IDNO, "G20134564");
        map.put(PROINFO_OCCCATEGORY, "000101");
        map.put(INSURED_MOBILE, "18817315256");
        map.put(INSURED_EMAIL, "");
        map.put(INSURED_HEIGHT, "173");
        
        map.put(INSURED_WEIGHT, "70");
        
        JSONObject insuredJson = new JSONObject();
        insuredJson.put(PROVINCE, "110000");
        insuredJson.put(CITY, "110100");
        insuredJson.put(COUNTY, "110101");
        map.put(INSURED_CURRENTRESIDENCE, insuredJson.toJSONString());
        
        map.put(INSURED_DETAILEDADDRESS, "");
        map.put(INSURED_INSUREDAMOUNT, "0.01");
        map.put(INSURED_POSTALCODE, "");
        return map;
    }
}









發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章