鍍金池/ 問答/測試  網絡安全  Office/ 「單元測試」A值在300秒后會變成B,我如何測試這個接口呢?

「單元測試」A值在300秒后會變成B,我如何測試這個接口呢?

感謝 @betacat 的提醒,我刪掉之前粗糙的例子,舉一個具體的場景:

假設我需要對一款策略游戲進行測試。當前資源 15 單位,資源最少經過 300s 才會更新一次,我們按照公式計算,300s 后資源應該是 35 單位。

如果接口的時間取值是從系統(tǒng)時間獲取的,我就很難直接偽造。所以請問:我該如何快速的進行測試

不知道各位大佬有什么好想法。


選答蟹蟹:比較全面的測試類書籍或中長篇教程(不限定語言,對“為什么要寫測試”、“好的全面的測試該怎么設計”很迷茫),請推薦


@原罪 老師提供了「觀察者模式:測試代碼訂閱事件主題,真正的執(zhí)行程序發(fā)布事件主題。這種耦合是最低的」的答案,雖然沒有解決我「如何快速進行測試」的困惑,但的確很有啟發(fā)。

因在評論中,就貼上來供大家參考。再次感謝兩位回答的大佬 :D

回答
編輯回答
法克魷

你說的是前端吧?像mocha或者jasmine等框架,在test時都會傳入一個done的結束函數。

describe('category', () => {
  it('some test', (done) => {
    // ...some code
    
    setTimeout(() => {
      // ...some code
      done();
    }, 301);
  });
});

執(zhí)行done()即代表測試結束。

注意,如果你沒有顯性的寫done形參,測試框架會立刻結束。如果有寫形參,那么你必須執(zhí)行done()才會結束

2017年11月20日 07:45
編輯回答
獨白

瀉藥。我建議用msg或者ioc隔離開獲取時間的操作,然后直接hook msg進行偽造時間的reply,ioc則直接mock一個fake object來返回偽造的時間。

2017年2月23日 06:13
編輯回答
護她命

首先你要回答為什么是300s后這個value才會變化,業(yè)務需求還是后臺計算?

  • 如果只是單純的等待一定長時間,那么這個等待值應該是可配置的。基于可配置的系統(tǒng),你可以針對單元測試調整配置項。
  • 如果是后臺計算真的很復雜需要300s,那么這也許是一個巨型接口,建議針對更內部的函數寫單元測試。

為何寫測試,你可以去閱讀大神Martin Fowler的文章 https://martinfowler.com/arti...

2017年9月15日 20:31