0

2番目のアサーションは、以下の単体テストでは実行されません。

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 <Bar.MyClass>()を設定すると、Get <Foo.MyClass>()の設定が上書きされるようです。これは、Get <T>()を設定するときにMoqが名前空間FooとBarを無視することを意味しますか?MyClassクラスの名前を変更せず、IRepoを実装せずに、これを回避する方法はありますか?Moq3.1.416.3を使用しています。

更新:これは次のリリースで修正されるようです。

4

1 に答える 1

1

Moqは名前空間を無視しません。これはバグのようです。それを報告する適切な場所はhttp://code.google.com/p/moq/issues/entryです。

于 2009-07-13T03:21:15.260 に答える