Moq在设置模拟时是否会忽略名称空间?

时间:2009-07-06 20:32:27

标签: unit-testing moq mocking

第二个断言永远不会在下面的单元测试中执行:

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.
        }
    }
}

看起来设置Get&lt; Bar.MyClass&gt;()会覆盖Get&lt; Foo.MyClass&gt;()的设置。这是否意味着Moq在设置Get&lt; T&gt;()时会忽略命名空间Foo和Bar?有没有办法绕过这个没有重命名MyClass类而没有实现IRepo?我正在使用Moq 3.1.416.3。

更新:对于下一个版本,这似乎是fixed

1 个答案:

答案 0 :(得分:1)

Moq不会忽略名称空间。 这看起来像一个bug。 报告它的正确位置是http://code.google.com/p/moq/issues/entry