2009-07-06 83 views
0

第二断言从不执行在下面的单元测试:设置模拟时,Moq会忽略名称空间吗?

namespace Foo { 
    public class MyClass { 
    } 
} 

namespace Bar { 
    public class MyClass { 
    } 
} 

namespace Quux { 
    public interface IRepo { 
     object Get<T>() where T : new(); 
    } 
} 

namespace Tests { 
    [TestFixture] 
    public class MyTests { 
     private Mock<Quux.IRepo> repo = new Mock<Quux.IRepo>(); 

     [SetUp] 
     public void Setup() { 
      repo.Setup(r => r.Get<Foo.MyClass>()).Returns(new Object()); 
      repo.Setup(r => r.Get<Bar.MyClass>()).Returns(new Object()); 
     } 

     [Test] 
     public void Test() { 
      Assert.IsNotNull(repo.Object.Get<Foo.MyClass>()); 
      Assert.IsNotNull(repo.Object.Get<Bar.MyClass>()); // Never reached. 
     } 
    } 
} 

看起来设置获取<Bar.MyClass>()将覆盖设置为获取<Foo.MyClass>()。这是否意味着Moq在设置时会忽略名称空间Foo和Bar Get <T>()?有没有办法解决这个问题,而不重命名MyClass类,也没有实现IRepo?我正在使用Moq 3.1.416.3。

更新:看起来这是fixed下一版本。

回答