2015-04-19 12 views
0

我正在測試代碼生成器的單元測試。單元測試的基本流程如下:在生成的C#類中動態單元測試的最佳方法

  1. 單元測試調用適當的方法並生成代碼。很簡單。

  2. 單元測試編譯生成的C#代碼(步驟#1)。如果代碼compliles,進行第3步,否則停止一切。

  3. 在步驟#2 suceeded,單元測試然後運行在步驟2中所產生的編譯的代碼等,預先寫好的單元測試爲此,我將利用這裏描述的解決方案:Running individual NUnit tests programmaticallyNUnit API And Running Tests Programmatically

爲第2步的做法是這樣的問題是什麼:我想我有兩個選擇(1)運行Visual Studio命令行編譯溶液或用CompilerParameters(2)使用 CSharpCodeProvider。任何建議將不勝感激。

+0

你認爲編譯與VS有關係嗎?我應該能夠在沒有安裝VS的情況下運行測試嗎? –

+0

你可以看看Roslyn。這是新的C#編譯器,它有一個API,你可以使用:https://github.com/dotnet/roslyn – Kenneth

+0

邁克ž,我真的不在乎如果編譯綁定到VS.我看到了你要去的地方:如果編譯需要與VS綁定,那麼使用CSharpCodeProvider。但是CSharpCodeProvider/CompilerParameters可以提供VS命令行提供的一切嗎? – chrisl08

回答

0

我個人每天都會使用Roslyn,所以我很想和Kenneth一起去推薦它,但是,就你的情況而言,如果你想知道的唯一信息是代碼編譯的話,我會更傾向於對CSharpCodeProvider類,特別是如果每​​個正在進行單元測試的方法生成單個代碼文件。如果你必須對生成的代碼進行任何形式的分析,或者你可能會使用Roslyn,但我懷疑這是你的情況。 Roslyn唯一可能帶給你的是你可以直接使用open up a whole project/solution,而不是試圖編譯每個單獨的文件,這可能會對你有吸引力(比你想象的要簡單得多)。

除了這個建議,我只能說如果你只需要在CSharpCodeProvider和命令行選項之間進行選擇,我一定會選擇CSharpCodeProvider,因爲它已經包裝並公開了與你分析相關的數據和操作(是否有任何錯誤?=>讓我們檢查compiledResults.Errors.Count == 0)。您不需要調用外部進程(C#編譯器)以獲得您想要的內容,這使得我認爲它是一個更簡單的選項,同時也具有很大的靈活性(即:CompilerParameters

我不知道你是否開始玩弄它,但你不應該用這種方法有太多問題。希望這可以幫助。

+0

謝謝。由於能夠開放整個項目/解決方案並編譯它,我將與Roslyn一起進行。我不知道這個。再次感謝 – chrisl08

+0

當然。只要保持CSharpCodeProvider選項打開,如果Roslyn出於某種原因不能解決問題,我認爲它仍然是第二好的選擇。 –

相關問題