亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何對線程代碼進行單元測試?

如何對線程代碼進行單元測試?

如何對線程代碼進行單元測試?到目前為止,我已經避免了測試多線程代碼的噩夢,因為它看起來太像雷區了。我想問人們是如何進行依賴線程成功執行的代碼測試的,或者人們是如何測試那些只在兩個線程以給定方式交互時才會出現的問題的呢?對于今天的程序員來說,這似乎是一個非常關鍵的問題,把我們的知識集中在這個IMHO上是很有用的。
查看完整描述

3 回答

?
嚕嚕噠

TA貢獻1784條經驗 獲得超7個贊

聽著,沒有簡單的方法可以做到這一點。我正在做一個本質上是多線程的項目。事件來自操作系統,我必須同時處理它們。

處理復雜的多線程應用程序代碼的最簡單方法是:如果測試太復雜,那么您就做錯了。如果您有一個具有多個線程的實例,并且不能測試這些線程相互執行的情況,那么您的設計就需要重新進行。它既簡單又復雜。

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

但是,您必須認識到,即使這樣做,您仍然不能測試每一種情況下,兩個線程的步伐,彼此。要做到這一點,您必須在同一個測試中并發地運行兩個線程,然后精確地控制它們在任何給定時刻執行的行。你能做的最好的就是模擬這種情況。但是,這可能需要您專門為測試編寫代碼,而這最多是實現真正解決方案的半步。

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

看,目前的情況(可能還會有一個好時機),測試多線程應用程序的最好方法是盡可能減少線程代碼的復雜性。盡量減少線程交互的區域,盡可能最好地進行測試,并使用代碼分析來確定危險區域。


查看完整回答
反對 回復 2019-06-21
?
largeQ

TA貢獻2039條經驗 獲得超8個贊

這個問題發布的時候已經有一段時間了,但還是沒有答案.

有一種方法,我練習C#代碼。對于單元測試,您應該能夠編程。可復制測試,這是多線程代碼中最大的挑戰。因此,我的答案是將異步代碼強制放入測試工具中,這是可行的。同步.

這是Gerard Meszardos的書中的一個想法“xUnit測試模式并且被稱為“謙卑對象”(第695頁):您必須分離核心邏輯代碼和任何聞起來像異步代碼的代碼。

這使您可以在同步方式,道路。您對在核心邏輯上執行的呼叫的時間有絕對的控制,因此可以進行可復制測試。這是分離核心邏輯和異步邏輯的好處。

這個核心邏輯需要由另一個類包裝,它負責異步地接收對核心邏輯的調用。代表們這些對核心邏輯的調用。生產代碼只能通過該類訪問核心邏輯。因為這個類只應該委托調用,所以它是一個非常“愚蠢”的類,沒有太多的邏輯。因此,您可以將這個異步工作類的單元測試保持在最低限度。

以上的任何東西(測試類之間的交互)都是組件測試。同樣在這種情況下,如果你堅持“謙遜對象”模式,你應該能夠對時間有絕對的控制。


查看完整回答
反對 回復 2019-06-21
?
慕姐4208626

TA貢獻1852條經驗 獲得超7個贊

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

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

  2. 單元測試監視對象(那些在調用者的控制線程中執行同步方法的方法),這些方法公開了同步的公共API-實例化了執行API的多個模擬線程。構造執行被動對象內部條件的方案。包括一個更長時間運行的測試,它可以在很長一段時間內從多個線程中擺脫出來。這是不科學的,我知道,但它確實建立了信心。

  3. 單元測試活動對象(封裝自己的線程或控制線程的線程)-類似于上面的#2,根據類設計的不同而有所變化。公共API可能阻塞或非阻塞,呼叫者可能獲得期貨,數據可能到達隊列或需要去排隊。這里有很多種組合;白色的盒子離開了。仍然需要多個模擬線程來調用被測試對象。

作為旁白:

在我所做的內部開發人員培訓中,我教并發支柱這兩種模式作為思考和分解并發問題的主要框架。顯然還有更高級的概念存在,但我發現這套基礎知識可以幫助工程師遠離困境。它還導致代碼更易于測試,如上文所述。


查看完整回答
反對 回復 2019-06-21
  • 3 回答
  • 0 關注
  • 1058 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號