2009-10-06 61 views
3

我爲我公司的應用程序開發了大量的單元測試基礎,dev希望將我的單元測試交給我們的支持部門,以幫助他們調試客戶安裝問題。我使用mstest編寫了單元測試,因此如果用戶想要使用我的測試,那麼支持將不得不在客戶機器上安裝Visual Studio,顯然,這是錯誤的。我已經在命令提示符下使用mstest而不使用VS,但在客戶系統上黑客註冊表讓它認爲VS被安裝也是不可行的。單元測試客戶安裝(使用NUnit和MSTest)

爲了解決這個問題,我計劃使用this post中的信息編譯我的nunit的mstests。但是,在NUnit啓用後編譯並將我的測試程序集dll添加到NUnit runner後,我收到錯誤消息「此程序集不是用任何已知框架構建的」。

有沒有人這樣做,並有提示/技巧,讓這個運行?或者這是解決這個問題的完全錯誤的方式?謝謝。

+0

對我來說,這似乎是一個可行的'解決方案':提取所有單元測試的核心/內容,將它們放在單獨的類庫解決方案中,以便能夠分發它。當然,您必須將Assert.Functions從類庫解決方案中分離出來。從單元測試代碼或外部測試工具中調用外部函數。所以類庫成爲核心,而MSTest框架或你自己的外部測試工具成爲'GUI'包裝。這當然需要一些重構/重寫,但實際測試保持不變,不是嗎? – 2014-02-24 14:03:41

回答

1

我打算帶着你對此的第二個想法「或者這是解決這個問題的完全錯誤的方式。

要輕鬆解決這個問題,不要混淆支持部門,我會建議在測試類中創建一個小命令行包裝器。你可以自己寫的命令行工具,或者如果你喜歡,你可以做到以下幾點:

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() 
    { ... } 
} 

(是的,我承認我無恥地插入我自己的代碼凌晨位:)

+0

有趣。我從昨天開始就這樣做了一些,掀起一個小型控制檯應用程序,它使用反射來調用我的類中的測試方法,但遇到了TestContext和類初始化方法的問題。看起來像你在測試運行中自己構建初始化器? – Case 2009-10-06 21:23:21

+1

啊,不,我忘了MsTest奇怪的初始化依賴關係。我認爲他們故意強迫你繼續使用MsTest :)無論如何,你可以打破你對MsTest特定的東西的依賴嗎?如果不是,我將不得不撤回我的原始建議,並建議您編寫除測試外的命令行實用程序。只需在測試中保持自動化,以確保其繼續工作。 – 2009-10-06 23:22:49

+0

這是最接近我回答的答案 - 這只是我的代碼的另一個版本,它運行在NUnit上,其中包含一部分測試。 – Case 2011-07-14 01:50:51

1

我擔心的:如果你想獲得看上你可以用以下任何裝點你的測試會有人添加一個單元測試(或僞裝成單元測試的集成測試),您無意中在您的客戶數據庫中運行該測試。當然,我正在做假設,比如你有一個數據庫,但是除非你能確定你的測試現在和將來都是非破壞性的,否則這似乎是一種危險的方法。

你有沒有登錄你的應用程序?這是幫助支持的傳統方式,並且有幫助您的many tools

相關問題