![](/img/trans.png)
[英]Why does MSTest DeploymentItem fail when running all tests in solution?
[英]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
不支持在多個測試類中使用相同的源路徑名。 注意:我說的是相同的路徑名,而不是物理文件夾(請考慮使用相同的文件夾名部署不同的測試項目)。
但是,目標文件夾名稱可以不同,不會產生不良影響。
我的建議是:
[TestClass, DeploymentItem("LanguageData", "LanguageData")]
OcrTests
和OcrBuilderTests
類以繼承新類。 我已經嘗試過了,並取得了巨大的成功。 就我而言,我有一個通用的測試夾具項目和多個測試項目,每個項目都使用基類。
不幸的是,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.