簡體   English   中英

如何使用“外部”配置文件(即使用configSource)和MSTest單元測試項目?

[英]How can you use “external” configuration files (i.e. with configSource) with an MSTest unit test project?

為簡單起見,我通常將大量配置(即app.config和web.config的內容)拆分為單獨的.config文件,然后使用'configSource'屬性從主配置文件中引用它們。 例如:

<appSettings configSource="appSettings.config"/>

然后將所有鍵/值對放在該appSettings.config文件中,而不是在主配置文件中使用此內聯:

<appSettings>
    <add key="FirstKey" value="FirstValue"/>
    <add key="SecondKey" value="SecondValue"/>
    ...
</appSettings>

這通常適用於應用程序本身,但在嘗試編寫單元測試時會遇到問題,無論出於何種原因,單元測試需要從存儲在其中一個外部文件中的配置部分獲取某些值。 (我知道大多數這些都可能被認為是“集成測試”,因為它們依賴於配置系統,我也有“純單元測試”,但那些不是問題。我真的在尋找測試是否正確檢索這些配置值並以正確的方式影響行為)。

由於MSTest如何編譯並將輸出復制到與每次測試運行不同的模糊文件夾(而不是像你想象的那樣到'bin'文件夾),它似乎永遠無法在測試時找到那些外部文件正在執行。 我已經嘗試過使用后期構建操作來完成這項工作,但沒有運氣。 有沒有辦法在運行時將這些外部文件復制到正確的輸出文件夾中?

找到了:

如果編輯測試運行配置(通過雙擊在添加新單元測試時放入“解決方案項”解決方案文件夾中的.testrunco​​nfig文件),則會獲得測試運行配置對話框。 有一個名為“部署”的部分,您可以在解決方案中的任何位置指定文件或整個文件夾,可以在運行時將已編譯的程序集復制到正確的文件夾中。

通過這種方式,我現在可以在一組外部.config文件中定義大部分配置,並在每次測試運行時自動復制它們。

嘗試在Visual Studio外部運行測試時,測試運行配置有點尷尬。

對於使用MSTest的命令行執行,保持“干凈”變得非常麻煩。 它們也是解決方案的“全局”,因此將為每個測試項目復制外部文件。

我更喜歡DeploymentItem屬性。

[TestMethod]
[DeploymentItem(@"test_data.file")]
public void FooTest()
{...}

使測試獨立於.testrunco​​nfig文件。

  1. 在connectionString中寫下這個。 第一個ConnectionString.config不存在。

    <“connectionStrings configSource =”ConnectionString.config“>”

  2. 管理員特權的打開命令提示符(CMD)。

  3. 在bin / debug文件夾中創建名為ConnectionString.config的符號鏈接。

C:\\ Windows \\ Systems32> mklink "C:\\Link To Folder\\....\\ConnectionString.config" "C:\\Users\\Name\\Original Folder\\.....\\...\\Secure ConnectionString.config"

最后,它在指定位置創建ConnectionString配置文件。 並且成功地工作。

在此輸入圖像描述

暫無
暫無

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

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