【发布时间】:2013-11-26 13:50:26
【问题描述】:
我有一个类似于下面的设置:
[TestMethod]
public void NoIntegers()
{
Mock<IBar> mockBar = new Mock<IBar>(MockBehavior.Strict);
Mock<IEnumerable<int>> mockIntegers = new Mock<IEnumerable<int>>(MockBehavior.Strict);
mockBar
.SetupGet(x => x.Integers)
.Returns(mockIntegers.Object);
mockIntegers
.Setup(x => x.Any())
.Returns(false);
Assert.IsFalse(new Foo(mockBar.Object).AreThereIntegers());
}
public interface IBar
{
IEnumerable<int> Integers { get; }
}
public class Foo
{
private IBar _bar;
public Foo(IBar bar)
{
_bar = bar;
}
public bool AreThereIntegers()
{
return _bar.Integers.Any();
}
}
}
运行时无法初始化模拟
Test method NoIntegers threw exception: System.NotSupportedException: Expression references a method that does not belong to the mocked object: x => x.Any<Int32>()
我尝试以几种形式添加It.IsAny():
mockIntegers
.Setup(x => x.Any(It.IsAny<IEnumerable<int>>(), It.IsAny<Func<int, bool>>()))
.Returns(false);
// No method with this signiture
mockIntegers
.Setup(x => x.Any(It.IsAny<Func<int, bool>>()))
.Returns(false);
// Throws: Test method NoIntegers threw exception:
// System.NotSupportedException:
// Expression references a method that does not belong to the mocked object:
// x => x.Any<Int32>(It.IsAny<Func`2>())
我需要模拟什么才能运行它?
【问题讨论】:
标签: c# .net unit-testing mocking moq