2016-03-05 40 views
0

我與C#工作在的Visual Studio 2015年社區,與NUnit3犀牛嘲笑並試圖寫一個測試我的系統的一個組成部分(這不是一個單元測試)。不可能與TestCaseData運行測試產生從RhinoMocks存根

嘗試將生成的存根作爲提供給TestCaseSourceTestCaseData的參數時遇到問題。我得到在輸出窗口中出現以下錯誤:

Test adapter sent back a result for an unknown test case. Ignoring result for 'MyTest(Castle.Proxies.IMyInterfaceProxy4c6c716794ef48818f41fd5ead)'. 
Test adapter sent back a result for an unknown test case. Ignoring result for 'MyTest(Castle.Proxies.IMyInterfaceProxy4c6c716794ef48818f41fd5ead)'. 

測試名字,當我重新測試項目,但只要我嘗試運行它,它變成灰色出現在VS2015集成測試亞軍。

在這裏有根據我的測試代碼的一些示例代碼:

using NUnit.Framework; 
using Rhino.Mocks; 
using System.Collections; 

namespace FenixLib.Core.Tests 
{ 
    public interface IMyInterface 
    { 
     int Property { get; } 
    } 

    [TestFixture] 
    class TestMocks 
    { 
     [Test, TestCaseSource("TestCases")] 
     public void MyTest(IMyInterface what) 
     { 
      // Do stuff 
     } 

     public static IEnumerable TestCases() 
     { 
      yield return new TestCaseData (CreateFake (2)); 
      yield return new TestCaseData (CreateFake (4)); 
     } 

     public static IMyInterface CreateFake (int something) 
     { 
      var fake = MockRepository.GenerateStub<IMyInterface>(); 
      fake.Stub (x => x.Property).Return (something); 

      return fake; 
     } 
    } 
} 

我已經能夠如果我創建一個包裝生成的存根一個裝飾類克服的問題:

public class Decorator : IMyInterface 
{ 
    IMyInterface decorated; 

    public Decorator (IMyInterface decorated) 
    { 
     this.decorated = decorated; 
    } 

    public int Property 
    { 
     get 
     { 
      return decorated.Property; 
     } 
    } 
} 

並將return fake;改爲return new Decorator (fake);。一切正常,然後。

但是,在我的真實場景中,這有點痛苦,因爲我的界面不僅具有如本示例中的單個屬性,而且更復雜(並且我知道VS2015可以生成通過裝飾實現的代碼字段,但這不是重點)。另外,如果我最終要創建一個我不希望爲了測試目的而完全實現的接口的實現,那麼使用RinhoMocks是毫無意義的。

不管怎麼說,惹惱我是,我不明白爲什麼它不工作,因此我問:

誰能幫助我理解爲什麼沒有裝飾的代碼沒有工作?

回答

0

在發現時,TestExplorer創建一個進程並要求我們的適配器查找測試。您的TestCaseSource方法運行並生成案例。它有一個由Moq生成的名字。

在程序生命週期的後期,您的測試由Visual Studio執行,它會創建一個不同的進程並要求適配器運行測試。由於我們正在運行一個新的進程,因此適配器必須發現(即生成)整個案例。最有可能的是,Moq以不同的名字生成它們。最初創建的案例永遠不會運行,NUnit運行這些新案例,從TestExplorer的角度來看,這些案例從未被發現。

我以前沒有看到過這個症狀,但是我們遇到了類似的問題,那就是在執行時重新生成隨機參數。這實質上是體系結構的一個問題,只有在適配器可以以某種方式保持最初加載的測試程序集被執行過程找到時才能解決。

+0

好吧然後我猜如果我想要這個工作(使用RinhoMocks仍然有一些好處,因爲我必須創建不同的存根,而且我只需要一個裝飾類),分類類應該是行之有效的方法。 – racucad

+0

我接受這個答案,因爲沒有其他人似乎在討論中加入任何東西。 – racucad

+0

毫不奇怪。適配器下的易失性測試名稱問題非常模糊。 :-) – Charlie

相關問題