簡體   English   中英

dbUnit如何防止同時運行多個測試?

[英]DbUnit how to guard against multiple tests running at the same time?

我正在一個項目的測試環境中工作,並且正在考慮使用DbUnit.NET進行很多數據庫交互測試。 我確實有一個很大的問題:

我們正在與Oracle對抗,並且為每個開發人員設置一個單獨的測試數據庫實例確實是不可行的(特別是因為我們只有1個已經被時間束縛的DBA)。 這意味着所有開發人員和Continuous Integration服務器都需要使用相同的數據庫架構。

因此,提出一個問題:是否有一個好的方法可以防止一個以上的人同時進行測試? 在db表中放置一條表明正在運行測試的記錄,然后在測試完成后將其刪除很容易,但是NUnit無法在測試會話的開始和結束時運行任何記錄。

還有其他想法嗎? 看來這應該是一個非常普遍的問題……還是每個人都為每個可能運行測試的開發人員/測試人員實際運行單獨的數據庫實例嗎?

您可以使用[TestFixtureSetUp]屬性來注入您的標志,該標志指示測試正在運行,作為模擬“真實”信號量的一種方式。

當我們在共享數據庫上為一群開發人員運行數據庫測試時,我們使用了具有單個記錄的虛擬表作為鎖定令牌。 實際上,我們實際上為每個測試用例都獲取了鎖,這樣,想要運行一個測試用例的開發人員就不必等待運行整個套件的另一個開發人員完成。 我們使每個測試設置了自己的數據-測試方法之間沒有保留。

我們使用數據庫鎖定機制將測試實際排隊,而不是在其他人已經在運行測試時使測試失敗。 我認為Oracle的鎖定算法有些不同,因此我不知道該如何工作。

我們唯一遇到麻煩的地方是開發人員想要在調試模式下逐步進行測試。 這將阻止任何其他想要運行測試的開發人員,直到他發布調試器。 我們將當前用戶的名字寫到一個虛擬表中,並讓鎖定機制在被阻止超過30秒時打印一條消息:“ Bob當前正在運行測試,並且已經運行了5分鍾。”

可以,但是要維護很多工作。 我們試圖使數據庫測試的數量保持較小,並且將大多數測試作為內存中的純單元測試進行。

我在一個與此類似的問題中所做的事情:

該程序具有一個配置變量,該變量已添加到所有相關項目的前面。 每個電台都有自己的設置,正確設置不會有沖突。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM