我打算帶着你對此的第二個想法「或者這是解決這個問題的完全錯誤的方式。
要輕鬆解決這個問題,不要混淆支持部門,我會建議在測試類中創建一個小命令行包裝器。你可以自己寫的命令行工具,或者如果你喜歡,你可以做到以下幾點:
using CSharpTest.Net.Commands;
static void Main(string[] args)
{
MyTest testClass = new MyTest();
// optional: testClass.MySetupMethod();
new CommandInterpreter(testClass).Run(args);
}
簡單的建造上面的代碼作爲命令行exe文件在新項目中引用測試組裝和CSharpTest.Net .Libary.dll。名稱空間CSharpTest.Net.Commands在CSharpTest.Net.Libary.dll集合from this download中定義。
基本上,上面的代碼將抓取您的測試類(在上面的示例中命名爲MyTest)並將所有公共方法公開爲可通過命令行執行的命令。默認情況下,它提供幫助輸出並設置Environment.ExitCode失敗。
public class MyTest
{
[System.ComponentModel.DisplayName("rename-this-function")]
[System.ComponentModel.Description("Some description for tech-support")]
[System.ComponentModel.Browsable(true | false)]
public void TestSomeFunction()
{ ... }
}
(是的,我承認我無恥地插入我自己的代碼凌晨位:)
對我來說,這似乎是一個可行的'解決方案':提取所有單元測試的核心/內容,將它們放在單獨的類庫解決方案中,以便能夠分發它。當然,您必須將Assert.Functions從類庫解決方案中分離出來。從單元測試代碼或外部測試工具中調用外部函數。所以類庫成爲核心,而MSTest框架或你自己的外部測試工具成爲'GUI'包裝。這當然需要一些重構/重寫,但實際測試保持不變,不是嗎? – 2014-02-24 14:03:41