程式設計思路-外部請求,中斷測試,結算費用,帶出logs引數

oktokeep發表於2024-09-07

1.合同到期,資料也落庫,存入到無效資料表中。正常的業務場景。
但是如果考慮到合同過期後,沒有按時的續簽,那麼這段時間段內的資料,實際上是需要恢復的。
原則:外部第三方請求引數,返回獲取的資料,都需要保持入庫,有的資料需要考慮恢復和排查問題。


2.計算費用介面/方法體,考慮有值的情況(已結算)
正常是無值的情況(未結算) 需要計算
原則:結算後的資料不允許修改變更。結算的查詢展示資料,是取結算後的資料,而不是實時計算的結果。
否則可能存在結算後因為單價或計算邏輯差異,導致計算後的結果與結算時的費用不一致。

3.中斷程式方法(int i = 1/0;),搜尋商品,下單
第一步:搜尋商品
第二步:下單
如果需要測試的第一步(搜尋商品是否正確),而不需要測試第二步(對該商品下單),可以在第一步結束之前,加上該程式碼異常,提前終止程式。

4.Request帶出物件,響應物件帶出物件。比如:在搜尋服務中,需要將每一步的搜尋結果,過濾了多少記錄等logs帶出來,然後在請求方存入日誌表。
在同一個專案中,請求物件可以帶出引數。如果是跨系統的遠端訪問的方式(feign),請求物件不可以帶出引數,而是需要透過返回物件帶出引數。

package com.example.core.mydemo.java.request;

import java.util.List;

public class RequestVo {
    private String id;
    private String name;
    private List<String> logs;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List<String> getLogs() {
        return logs;
    }

    public void setLogs(List<String> logs) {
        this.logs = logs;
    }
}

package com.example.core.mydemo.java.request;

import java.util.List;

public class ResponseVo {
    private String respCode;
    private String respMsg;
    private List<String> logs2;

    public String getRespCode() {
        return respCode;
    }

    public void setRespCode(String respCode) {
        this.respCode = respCode;
    }

    public String getRespMsg() {
        return respMsg;
    }

    public void setRespMsg(String respMsg) {
        this.respMsg = respMsg;
    }

    public List<String> getLogs2() {
        return logs2;
    }

    public void setLogs2(List<String> logs2) {
        this.logs2 = logs2;
    }
}

package com.example.core.mydemo.java.request;

import com.example.core.mydemo.json2.GsonUtils;
import com.google.gson.Gson;

import java.util.Arrays;

/**
 * output:
 * RequestVo 內部={"id":"1","name":"內部搜尋","logs":["搜尋1","搜尋2","搜尋3"]}
 * RequestVo 外部={"id":"1","name":"外部搜尋","logs":["搜尋1","搜尋2","搜尋3"]}
 * responseVo 外部={"respCode":"1","respMsg":"OK","logs2":["搜尋11","搜尋22","搜尋33"]}
 */
public class RequestTest {
    public static void main(String[] args) {
        RequestVo vo = new RequestVo();
        vo.setId("1");
        vo.setName("內部搜尋");
        ResponseVo responseVo = addRequest(vo);
        vo.setName("外部搜尋");
        System.out.println("RequestVo 外部=" + new Gson().toJson(vo));
        System.out.println("responseVo 外部=" + new Gson().toJson(responseVo));

    }

    public static ResponseVo addRequest(RequestVo vo){
        vo.setLogs(Arrays.asList("搜尋1","搜尋2","搜尋3"));
        System.out.println("RequestVo 內部=" + new Gson().toJson(vo));

        ResponseVo responseVo = new ResponseVo();
        responseVo.setRespCode("1");
        responseVo.setRespMsg("OK");
        responseVo.setLogs2(Arrays.asList("搜尋11","搜尋22","搜尋33"));
        return responseVo;
    }
}

5. else條件的坑,比如:
if(條件1 && 條件2){

}else{
//else的含義是條件1和條件2都不成立的條件下,才執行。
//如果需要在else裡面再拆分條件,可以再巢狀加入if,將範圍變小。
//總體原則是:else的執行條件,不能因為if而改變了原意。否則會不符合業務邏輯。
}

6.微信小程式和h5測試方法,可以參考對比測試。微信小程式和h5都是可以訪問的,功能一樣,僅僅是訪問的地址不同。
微信小程式測試環境:需要訪問的是體驗版本,否則訪問的是線上版本。

相關文章