首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何告诉NBuilder在生成对象时拦截getters?

如何告诉NBuilder在生成对象时拦截getters?
EN

Stack Overflow用户
提问于 2012-06-21 10:28:17
回答 1查看 707关注 0票数 2

我得到了这个NBuilder代码:

代码语言:javascript
复制
var fakeReviews = Builder<Review>
   .CreateListOfSize(100)
   .Build()
   .ToList()
   .AsReadOnly();

非常简单。

但它在Review的这个属性上是错误的:

代码语言:javascript
复制
public bool WasWrittenByAdmin
{  
   get
   {
      if (User == null) throw new InvalidOperationException("Must load User.");
      return User.UserSettings != null && User.UserSettings.IsAdmin;
   }
}

基本上,我认为NBuilder正在尝试评估所有属性,包括getter,但该用户属性并不存在。

即使我这样做了:

代码语言:javascript
复制
var fakeReviews = Builder<Review>
   .CreateListOfSize(100)
   .All().With(x => x.User = Builder<User>.CreateNew().Build())
   .Build()
   .ToList()
   .AsReadOnly();

它仍然出错。

有没有什么方法可以让NBuilder截取该getter,或者在它尝试计算用户属性之前,我该如何设置它?(并因此防止错误)。

EN

回答 1

Stack Overflow用户

发布于 2015-03-11 20:17:24

这并不理想,但是我通过显式地设置我不需要的属性的值来解决这个问题。

在您的例子中,这意味着要么根据您要测试的内容返回true/false,要么抛出异常。

所以基本上你可以做两个像这样的方法:

代码语言:javascript
复制
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://code.google.com/p/nbuilder/issues/detail?id=79

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11130781

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档