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を使用しています。
更新:これは次のリリースで修正されるようです。