你沒到我的評論作出迴應,但如果你想使用反射,你可以找到(相關類型的)所有屬性,並創建Setup
爲每本(指令using System.Linq.Expressions;
需要爲Expression
類是在範圍;我們創造我們自己的表達式樹):
var mock = new Mock<IFoo>();
var parameterExpression = Expression.Parameter(typeof(IFoo));
foreach (var property in typeof(IFoo)
.GetProperties().Where(x => x.PropertyType == typeof(int))
)
{
var lambdaExpression = Expression.Lambda<Func<IFoo, int>>(
Expression.Property(parameterExpression, property),
parameterExpression);
mock.Setup(lambdaExpression).Returns(12);
}
後來另外:不知道我真的明白你的問題。
如果你有多個值,強類型的許多屬性,你可以這樣做:
var mock = new Mock<IFoo>(MockBehavior.Strict);
mock.Setup(x => x.MyProp).Returns(12);
mock.Setup(x => x.MyOtherProp).Returns(3.14);
mock.Setup(x => x.MyThirdProp).Returns("test");
...
mock.Setup(x => x.MyLastProp).Returns(new DateTime(2015, 1, 1));
var objToUse = mock.Object;
或做:
var rep = new MockRepository(MockBehavior.Strict);
var objToUse = rep.OneOf((IFoo x) =>
x.MyProp == 12
&& x.MyOtherProp == 3.14
&& x.MyThirdProp == "test"
&& ...
&& x.MyLastProp == new DateTime(2015, 1, 1)
);
我不認爲它可以製成不太麻煩。如果你想要一個鬆散的模擬,有var objToUse = Mock.Of((IFoo x) => x.MyProp == 12 && ...);
,幾乎是一個班輪。
你想要所有的屬性返回'12'嗎?是「int」類型的所有屬性? –
你如何使用你的模擬,以便你需要設置所有的屬性?也許你需要一個假的(虛擬數據),而不是一個模擬,你可以使用像[AutoFixture](https://github.com/AutoFixture/AutoFixture) –
這似乎是你想要的只是一個普通的模擬與MockBehaviour。鬆散(這是默認的),所以我真的不明白你的問題 –