我得到了这个NBuilder代码:
var fakeReviews = Builder<Review>
.CreateListOfSize(100)
.Build()
.ToList()
.AsReadOnly();非常简单。
但它在Review的这个属性上是错误的:
public bool WasWrittenByAdmin
{
get
{
if (User == null) throw new InvalidOperationException("Must load User.");
return User.UserSettings != null && User.UserSettings.IsAdmin;
}
}基本上,我认为NBuilder正在尝试评估所有属性,包括getter,但该用户属性并不存在。
即使我这样做了:
var fakeReviews = Builder<Review>
.CreateListOfSize(100)
.All().With(x => x.User = Builder<User>.CreateNew().Build())
.Build()
.ToList()
.AsReadOnly();它仍然出错。
有没有什么方法可以让NBuilder截取该getter,或者在它尝试计算用户属性之前,我该如何设置它?(并因此防止错误)。
发布于 2015-03-11 20:17:24
这并不理想,但是我通过显式地设置我不需要的属性的值来解决这个问题。
在您的例子中,这意味着要么根据您要测试的内容返回true/false,要么抛出异常。
所以基本上你可以做两个像这样的方法:
public static Review BuildReviewByAdmin()
{
return Builder<Review>.CreateNew().With(x => x.WasWrittenByAdmin = true).Build();
}
public static Review BuildReviewByNonAdmin()
{
return Builder<Review>.CreateNew().With(x => x.WasWrittenByAdmin = false).Build();
}然后你可以在特定的测试中使用你想要的。
但是,如果你想测试test的逻辑,我会用不同的方法。
此外,还有一个涉及此问题的NBuiler谷歌代码问题:
https://stackoverflow.com/questions/11130781
复制相似问题