鍍金池/ 問(wèn)答/測(cè)試  網(wǎng)絡(luò)安全  Office/ 「單元測(cè)試」A值在300秒后會(huì)變成B,我如何測(cè)試這個(gè)接口呢?

「單元測(cè)試」A值在300秒后會(huì)變成B,我如何測(cè)試這個(gè)接口呢?

感謝 @betacat 的提醒,我刪掉之前粗糙的例子,舉一個(gè)具體的場(chǎng)景:

假設(shè)我需要對(duì)一款策略游戲進(jìn)行測(cè)試。當(dāng)前資源 15 單位,資源最少經(jīng)過(guò) 300s 才會(huì)更新一次,我們按照公式計(jì)算,300s 后資源應(yīng)該是 35 單位。

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

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


選答蟹蟹:比較全面的測(cè)試類(lèi)書(shū)籍或中長(zhǎng)篇教程(不限定語(yǔ)言,對(duì)“為什么要寫(xiě)測(cè)試”、“好的全面的測(cè)試該怎么設(shè)計(jì)”很迷茫),請(qǐng)推薦


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

因在評(píng)論中,就貼上來(lái)供大家參考。再次感謝兩位回答的大佬 :D。

回答
編輯回答
法克魷

你說(shuō)的是前端吧?像mocha或者jasmine等框架,在test時(shí)都會(huì)傳入一個(gè)done的結(jié)束函數(shù)。

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

執(zhí)行done()即代表測(cè)試結(jié)束。

注意,如果你沒(méi)有顯性的寫(xiě)done形參,測(cè)試框架會(huì)立刻結(jié)束。如果有寫(xiě)形參,那么你必須執(zhí)行done()才會(huì)結(jié)束

2017年11月20日 07:45
編輯回答
獨(dú)白

瀉藥。我建議用msg或者ioc隔離開(kāi)獲取時(shí)間的操作,然后直接hook msg進(jìn)行偽造時(shí)間的reply,ioc則直接mock一個(gè)fake object來(lái)返回偽造的時(shí)間。

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

首先你要回答為什么是300s后這個(gè)value才會(huì)變化,業(yè)務(wù)需求還是后臺(tái)計(jì)算?

  • 如果只是單純的等待一定長(zhǎng)時(shí)間,那么這個(gè)等待值應(yīng)該是可配置的?;诳膳渲玫南到y(tǒng),你可以針對(duì)單元測(cè)試調(diào)整配置項(xiàng)。
  • 如果是后臺(tái)計(jì)算真的很復(fù)雜需要300s,那么這也許是一個(gè)巨型接口,建議針對(duì)更內(nèi)部的函數(shù)寫(xiě)單元測(cè)試。

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

2017年9月15日 20:31