2013-10-15 39 views
19

我使用的一個簡單證明了概念假貨NUnit測試:Microsoft.Fakes不會在正常的單元測試運行上下文

[Test] 
    public void TestFakes() 
    { 
     using (var ctx = ShimsContext.Create()) 
     { 
      System.Fakes.ShimDateTime.NowGet =() => { return new DateTime(2000, 1, 1); }; 

      Assert.That(DateTime.Now.Year, Is.EqualTo(2000)); 
     } 
    } 

該測試在Visual Studio測試瀏覽器上運行,但沒有按」噸運行中:

  • NUnit的GUI
  • NUnit的控制檯
  • JetBrains的測試運行(dotCover OR ReSharper的)
  • TESTD riven.net測試運行

在每個這些,我收到以下錯誤:

Microsoft.QualityTools.Testing.Fakes.UnitTestIsolation.UnitTestIsolationException : Failed to resolve profiler path from COR_PROFILER_PATH and COR_PROFILER environment variables

當我反映成組件,它好像它尋找的IntelliTrace,一VS旗艦版獨有的功能, - 我只安裝了Premium。

如何解決這個任何建議(我們使用NUnit的亞軍我們構建服務器上,所以這是一個攔截器使用正版正貨)

+2

你是否嘗試設置好像缺少的環境變量? –

+0

@DanielHilgarth不,因爲我不知道我可以設置它(將它設置爲任意字符串並不會幫助,FWIW) – pattermeister

+0

安裝Visual Studio 2012更新2.然後,您可以使用MS Fakes而不必擁有Ultimate版本,高級版就足夠了。 http://support.microsoft.com/kb/2797912 http://blogs.msdn.com/b/visualstudioalm/archive/2013/02/08/february-ctp-for-visual-studio-update-2.aspx #fakes –

回答

14

我不認爲你會根據能夠執行MS假貨使用除MS Test框架以外的任何其他測試。

我相信MS Fakes的工作方式會給諸如NUnit等測試運行者帶來問題。正因爲如此,我不知道,因爲其他模擬框架(例如TypeMock)在NUnit中工作良好等等。但是,MS Fakes特有的東西使它更難以運行(如果不是不可能的話) MS測試。無論如何,這是我的理論。

除非NUnit,xUnit等的作者增加了對MS Fakes的支持(或者有一個狡猾的解決方法),否則我認爲你必須堅持使用MS Test。

編輯:

它看起來像最新版本V2.5 NCrunch的確實與MS假貨工作。我已經在開發過程中嘗試過測試版,並且可以確認使用NCrunch無誤地執行了MS Fake測試。

+4

我接受了你的答案(謝謝:-),並找到原因:[當一個過程開始時,墊片需要特殊的儀器。如果沒有這個工具,所有嘗試填充任何方法或屬性都會拋出ShimNotSupportedException。在更新2中,我們將檢測檢查向前移動,以便在創建ShimsContext時發生。我們進行了此更改,以簡化Shims檢測問題的故障排除以及它們可能產生的ShimNotSupportedException。](http://connect.microsoft.com/VisualStudio/feedback/details/785411/cannot-debug-unit-tests-with-shims- in-vs2012-w-update2) – pattermeister

+0

王牌,感謝您的聯繫。 –

5

Fakes僅適用於Visual Studio Test Runner(又名VStest.Console.exe)。甚至之前的微軟MSTest跑步者doesn't support it

0

我相信你的答案是使用下面的命令之一:

VSTest.Console.exe UnitTests.dll /UseVsixExtensions 

VSTest.Console.exe UnitTests.dll /TestAdapterPath:%LocalAppData%\Microsoft\VisualStudio\12.0\Extensions\<nunit test adapter installation folder> 

這些命令將運行在dev的機器罰款。如果您想在構建服務器上運行單元測試,請複製nunit測試適配器文件夾以構建服務器並提及該路徑。