3 回答

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超7個(gè)贊

TA貢獻(xiàn)2039條經(jīng)驗(yàn) 獲得超8個(gè)贊
這個(gè)問題發(fā)布的時(shí)候已經(jīng)有一段時(shí)間了,但還是沒有答案.
有一種方法,我練習(xí)C#代碼。對(duì)于單元測試,您應(yīng)該能夠編程。可復(fù)制測試,這是多線程代碼中最大的挑戰(zhàn)。因此,我的答案是將異步代碼強(qiáng)制放入測試工具中,這是可行的。同步.
這是Gerard Meszardos的書中的一個(gè)想法“xUnit測試模式并且被稱為“謙卑對(duì)象”(第695頁):您必須分離核心邏輯代碼和任何聞起來像異步代碼的代碼。
這使您可以在同步方式,道路。您對(duì)在核心邏輯上執(zhí)行的呼叫的時(shí)間有絕對(duì)的控制,因此可以進(jìn)行可復(fù)制測試。這是分離核心邏輯和異步邏輯的好處。
這個(gè)核心邏輯需要由另一個(gè)類包裝,它負(fù)責(zé)異步地接收對(duì)核心邏輯的調(diào)用。代表們這些對(duì)核心邏輯的調(diào)用。生產(chǎn)代碼只能通過該類訪問核心邏輯。因?yàn)檫@個(gè)類只應(yīng)該委托調(diào)用,所以它是一個(gè)非?!坝薮馈钡念?,沒有太多的邏輯。因此,您可以將這個(gè)異步工作類的單元測試保持在最低限度。
以上的任何東西(測試類之間的交互)都是組件測試。同樣在這種情況下,如果你堅(jiān)持“謙遜對(duì)象”模式,你應(yīng)該能夠?qū)r(shí)間有絕對(duì)的控制。

TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超7個(gè)贊
真厲害!在我的(C+)單元測試中,我按照所使用的并發(fā)模式將其分解為幾個(gè)類別:
對(duì)于在單個(gè)線程中操作的類的單元測試,而不是線程感知的類-簡單,像往常一樣進(jìn)行測試。
單元測試監(jiān)視對(duì)象(那些在調(diào)用者的控制線程中執(zhí)行同步方法的方法),這些方法公開了同步的公共API-實(shí)例化了執(zhí)行API的多個(gè)模擬線程。構(gòu)造執(zhí)行被動(dòng)對(duì)象內(nèi)部條件的方案。包括一個(gè)更長時(shí)間運(yùn)行的測試,它可以在很長一段時(shí)間內(nèi)從多個(gè)線程中擺脫出來。這是不科學(xué)的,我知道,但它確實(shí)建立了信心。
單元測試活動(dòng)對(duì)象(封裝自己的線程或控制線程的線程)-類似于上面的#2,根據(jù)類設(shè)計(jì)的不同而有所變化。公共API可能阻塞或非阻塞,呼叫者可能獲得期貨,數(shù)據(jù)可能到達(dá)隊(duì)列或需要去排隊(duì)。這里有很多種組合;白色的盒子離開了。仍然需要多個(gè)模擬線程來調(diào)用被測試對(duì)象。
作為旁白:
在我所做的內(nèi)部開發(fā)人員培訓(xùn)中,我教并發(fā)支柱這兩種模式作為思考和分解并發(fā)問題的主要框架。顯然還有更高級(jí)的概念存在,但我發(fā)現(xiàn)這套基礎(chǔ)知識(shí)可以幫助工程師遠(yuǎn)離困境。它還導(dǎo)致代碼更易于測試,如上文所述。
添加回答
舉報(bào)