第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何對(duì)線程代碼進(jìn)行單元測試?

如何對(duì)線程代碼進(jìn)行單元測試?

如何對(duì)線程代碼進(jìn)行單元測試?到目前為止,我已經(jīng)避免了測試多線程代碼的噩夢(mèng),因?yàn)樗雌饋硖窭讌^(qū)了。我想問人們是如何進(jìn)行依賴線程成功執(zhí)行的代碼測試的,或者人們是如何測試那些只在兩個(gè)線程以給定方式交互時(shí)才會(huì)出現(xiàn)的問題的呢?對(duì)于今天的程序員來說,這似乎是一個(gè)非常關(guān)鍵的問題,把我們的知識(shí)集中在這個(gè)IMHO上是很有用的。
查看完整描述

3 回答

?
嚕嚕噠

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

聽著,沒有簡單的方法可以做到這一點(diǎn)。我正在做一個(gè)本質(zhì)上是多線程的項(xiàng)目。事件來自操作系統(tǒng),我必須同時(shí)處理它們。

處理復(fù)雜的多線程應(yīng)用程序代碼的最簡單方法是:如果測試太復(fù)雜,那么您就做錯(cuò)了。如果您有一個(gè)具有多個(gè)線程的實(shí)例,并且不能測試這些線程相互執(zhí)行的情況,那么您的設(shè)計(jì)就需要重新進(jìn)行。它既簡單又復(fù)雜。

多線程有許多方法可以避免線程同時(shí)運(yùn)行在實(shí)例中。最簡單的方法是使所有對(duì)象不可變。當(dāng)然,這通常是不可能的。因此,您必須在設(shè)計(jì)中確定線程與同一個(gè)實(shí)例交互的位置,并減少這些位置的數(shù)量。通過這樣做,您隔離了一些實(shí)際發(fā)生多線程的類,從而降低了測試系統(tǒng)的總體復(fù)雜性。

但是,您必須認(rèn)識(shí)到,即使這樣做,您仍然不能測試每一種情況下,兩個(gè)線程的步伐,彼此。要做到這一點(diǎn),您必須在同一個(gè)測試中并發(fā)地運(yùn)行兩個(gè)線程,然后精確地控制它們?cè)谌魏谓o定時(shí)刻執(zhí)行的行。你能做的最好的就是模擬這種情況。但是,這可能需要您專門為測試編寫代碼,而這最多是實(shí)現(xiàn)真正解決方案的半步。

測試代碼以解決線程問題的最好方法可能是通過對(duì)代碼的靜態(tài)分析。如果您的線程代碼沒有遵循有限的線程安全模式集,那么您可能會(huì)遇到問題。我相信VS中的代碼分析確實(shí)包含了一些線程知識(shí),但可能并不多。

看,目前的情況(可能還會(huì)有一個(gè)好時(shí)機(jī)),測試多線程應(yīng)用程序的最好方法是盡可能減少線程代碼的復(fù)雜性。盡量減少線程交互的區(qū)域,盡可能最好地進(jìn)行測試,并使用代碼分析來確定危險(xiǎn)區(qū)域。


查看完整回答
反對(duì) 回復(fù) 2019-06-21
?
largeQ

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ì)的控制。


查看完整回答
反對(duì) 回復(fù) 2019-06-21
?
慕姐4208626

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

真厲害!在我的(C+)單元測試中,我按照所使用的并發(fā)模式將其分解為幾個(gè)類別:

  1. 對(duì)于在單個(gè)線程中操作的類的單元測試,而不是線程感知的類-簡單,像往常一樣進(jìn)行測試。

  2. 單元測試監(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í)建立了信心。

  3. 單元測試活動(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)致代碼更易于測試,如上文所述。


查看完整回答
反對(duì) 回復(fù) 2019-06-21
  • 3 回答
  • 0 關(guān)注
  • 1061 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)