簡體   English   中英

每個解決方案有多個測試項目時,DeploymentItem無法復制目錄

[英]DeploymentItem fails copying directories when there are multiple test projects per solution

我有許多測試類和方法可以復制特定目錄,如下所示:

[TestClass, DeploymentItem("LanguageData", "LanguageData")]
public class OcrTests
{
    [TestMethod]
    public void Can_Capture_Field()
    {
        // some code that expects the LanguageData directory to be in the test results Out directory
    }

    // etc
}

[TestClass]
public class OcrBuilderTests
{
    [TestMethod, DeploymentItem("LanguageData", "LanguageData")]
    public void Can_Build_Specific_Ocr_Engine_Implementation()
    {
        // some more code that expects the LanguageData directory to be in the test results Out directory
    }

    // etc
}

這些測試在單個程序集中,並且LangaugeData目錄中的所有文件的“ Copy to Output Directory設置為Copy Always

一切正常,只要將一個測試程序集加載到解決方案中,或者該目錄是我運行測試的唯一程序集(即僅在當前上下文/類中運行測試),就可以將目錄復制到測試結果Out目錄。

一旦添加第二個程序集並運行該解決方案中的所有測試,該目錄就不再被復制, 其他僅僅是單個文件的DeploymentItems似乎可以被復制。

測試本身仍然可以運行,但是依賴於該目錄的測試會崩潰。 大概是因為MSTest找不到目錄-也許期望它位於其他測試程序集之一的生成目錄中?

有什么想法可以防止多個測試項目阻止復制,以及我可以做些什么來解決這個問題,而無需將該目錄中的每個文件都添加為單獨的DeploymentItem?

這個問題已經很老了,但仍然可以使其他人受益。 特別是因為到這里結束了:)

看來DeploymentItemAttribute不支持在多個測試類中使用相同的源路徑名。 注意:我說的是相同的路徑名,而不是物理文件夾(請考慮使用相同的文件夾名部署不同的測試項目)。

但是,目標文件夾名稱可以不同,不會產生不良影響。

我的建議是:

  1. 創建一個夾具基類(如果您願意,在單獨的項目中)
  2. 添加屬性: [TestClass, DeploymentItem("LanguageData", "LanguageData")]
  3. 更改您的OcrTestsOcrBuilderTests類以繼承新類。
  4. 請記住從OcrTests和OcrBuilderTests中刪除“ LanguageData”的Deploymentitem屬性

我已經嘗試過了,並取得了巨大的成功。 就我而言,我有一個通用的測試夾具項目和多個測試項目,每個項目都使用基類。

不幸的是,DeploymentItemAttribute充滿了Gotchas,更多信息請參見此處

嘗試了您的方法,但仍然無法正確復制文件夾,因此我所做的是復制文件而不是目錄(可能對某人有所幫助):

[TestClass]
[DeploymentItem("connectionStrings.config")]

// should be able to do this, but it does not work always, only sometimes
//[DeploymentItem("Configs", "Configs")]

// this instead should work always
[DeploymentItem("Configs\\file1.txt", "Configs")]
[DeploymentItem("Configs\\file2.txt", "Configs")]
[DeploymentItem("Configs\\file3.txt", "Configs")]
.....
[DeploymentItem("Configs\\filen.txt", "Configs")]
public class BaseTests
{
}

暫無
暫無

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

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