【问题标题】:JUnit testing (positive and negative testing)JUnit 测试(正负测试)
【发布时间】:2018-03-23 14:42:35
【问题描述】:

这是我为 JUnit 测试编写的正负测试代码。

@Test
public void getMaintenenceIntervalsByMetadataOKTest() throws Exception {

    MultiValueMap<String, String> params = new LinkedMultiValueMap<String, String>();
          params.set("vinModelYear", "2016");
          params.set("vinModelCode", "1633F6");
          params.set("vinEngineCode", "CZTA");
          params.set("interval", "100000");
          params.set("vinTransmissionCode", "");
          params.set("importerNumber", "");
          params.set("makeCode", "V");
          params.set("descriptionText", "");
          params.set("languageCode", "en-US");
          params.set("dealerCode", "408083");

    mvc.perform(get("/upg-admin-controller/maintenence-intervals-by-metadata")
            .contentType(MediaType.APPLICATION_JSON)
            .params(params))
            .andExpect(status().isAccepted());
}

@Test
public void getMaintenenceIntervalsByMetadata400Test()
        throws Exception {

    MultiValueMap<String, String> params = new LinkedMultiValueMap<String, String>();
          params.set("vinModelYear", "2000");
          params.set("vinModelCode", "8727R9");
          params.set("vinEngineCode", "GTAV");
          params.set("interval", "100000");
          params.set("vinTransmissionCode", "");
          params.set("importerNumber", "");
          params.set("makeCode", "T");
          params.set("descriptionText", "");
          params.set("languageCode", "sp-MX");
          params.set("dealerCode", "120021");

    mvc.perform(get("/upg-admin-controller/maintenence-intervals-by-metadata")
            .contentType(MediaType.APPLICATION_JSON)
            .params(params))
            .andExpect(status().isBadRequest());
}

错误:

错误:java.lang.AssertionError:预期状态: 但原为:。

我一直在尝试修复它,但找不到解决方案。在 Eclipse 上使用 EclEmma 扩展。 (对不起,如果代码超出了行。文本框很小,它将一行代码分成两行。)

这也是我正在使用的具有 QueryParams 的控制器代码。

@RequestMapping(value = "/maintenence-intervals-by-metadata", method = RequestMethod.GET)
public ResponseEntity<List<AdminMaintenanceIntervalReponse>> findMaintenenceIntervalsByMetadata( @QueryParam("modelYear") String modelYear,  
        @QueryParam("modelCode") String modelCode, @QueryParam("engineCode") String engineCode, @QueryParam("interval") String interval , 
        @QueryParam("transmissionCode") String transmissionCode , @QueryParam("importer") String importer, @QueryParam("make") String make,  
        @QueryParam("descriptionText") String descriptionText, @QueryParam("languageCode")  String languageCode, @QueryParam("dealerCode")  String dealerCode, @QueryParam("brand") String Brand) throws MPMSException {

    LOGGER.log(Level.INFO, "Entered UPGAdminServiceController, getAllMaintenenceIntervalsByMetadata");

    LOGGER.log(Level.INFO, "modelYear =" + modelYear +" modelCode = " + modelCode +" engineCode = " + engineCode +" interval = " + interval + "transmissionCode = " + transmissionCode + "importer = " + importer + "make = " + make + "descriptionText = " + descriptionText);


    List<AdminMaintenanceIntervalReponse> allMaintenanceIntervalsList = new ArrayList<AdminMaintenanceIntervalReponse>();
    try{

        Integer modelYearParam = null;

        if (modelYear!=null){
            modelYearParam = Integer.parseInt(modelYear);
        }

        Integer intervalParam = null;

        if (interval!=null){
            intervalParam = Integer.parseInt(interval);
        }

        String modelCodeParam = null;

        if (modelCode!=null){
            modelCodeParam = String.valueOf(modelCode);
        }

        String engineCodeParam = null;

        if (engineCode!=null){
            engineCodeParam = String.valueOf(engineCode);
        }
        String transmissionCodeParam = null;

        if (transmissionCode!=null){
            transmissionCodeParam = String.valueOf(transmissionCode);
        }

        Integer importerParam = null;

        if (importer!=null){
            importerParam = Integer.parseInt(importer);
        }

        String makeParam = null;

        if (make!=null){
            makeParam = String.valueOf(make);

        }

        if (descriptionText!=null){
            String.valueOf(descriptionText);
        }

        allMaintenanceIntervalsList = upgAdminMaintenanceCalcService.findMaintenanceIntervalsByMetadata(modelYearParam, modelCodeParam, engineCodeParam, intervalParam, transmissionCodeParam, importerParam, makeParam, descriptionText, languageCode, dealerCode);

    } catch(MPMSException e){
        throw e;
    } catch (Exception e) {
        throw new MPMSException(ErrorConstants.UNKNOWN.getErrorCode(), "No Data Available", ErrorConstants.UNKNOWN.toString(), e);
    }

    return new ResponseEntity<List<AdminMaintenanceIntervalReponse>>(allMaintenanceIntervalsList, HttpStatus.OK);
}

谁能帮我纠正这个问题。

【问题讨论】:

    标签: java unit-testing spring-mvc junit eclemma


    【解决方案1】:

    您的/maintenence-intervals-by-metadata 端点具有以下查询参数:

    • @QueryParam("modelYear")
    • @QueryParam("modelCode")
    • @QueryParam("engineCode")
    • @QueryParam("间隔")
    • @QueryParam("transmissionCode")
    • @QueryParam("importer")
    • @QueryParam("make")
    • @QueryParam("descriptionText")
    • @QueryParam("languageCode")
    • @QueryParam("dealerCode")
    • @QueryParam("brand")

    但是您的测试正在向 /maintenence-intervals-by-metadata 提交一个 [GET] 请求,并带有以下命名参数:

    • params.set("vinModelYear", "2016");
    • params.set("vinModelCode", "1633F6");
    • params.set("vinEngineCode", "CZTA");
    • params.set("interval", "100000");
    • params.set("vinTransmissionCode", "");
    • params.set("importerNumber", "");
    • params.set("makeCode", "V");
    • params.set("descriptionText", "");
    • params.set("languageCode", "en-US");
    • params.set("dealerCode", "408083");

    因此,您提供的查询参数与 /maintenence-intervals-by-metadata 端点预期的查询参数不匹配。名称不匹配:

    • modelYear 与 vinModelYear
    • modelCode 与 vinModelCode
    • ...等

    并且至少没有提供一个查询参数:端点声明了@QueryParam("brand"),但您没有提供名为"brand"的参数。

    我怀疑与 400 错误相关的消息可能包含以下内容:Required String parameter '...' is not present

    如果您更改您的调用,使得/maintenence-intervals-by-metadata 端点定义的每个查询参数都具有提供的正确类型的参数值(String),那么我认为 400 将不再出现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多