2016-03-05 43 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

相关问题