gpt4 book ai didi

c# - 如何让NBuilder在生成对象时拦截getter?

转载 作者:太空宇宙 更新时间:2023-11-03 16:30:04 24 4
gpt4 key购买 nike

我有这个 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,但 User 属性不存在。

即使我这样做:

var fakeReviews = Builder<Review>
.CreateListOfSize(100)
.All().With(x => x.User = Builder<User>.CreateNew().Build())
.Build()
.ToList()
.AsReadOnly();

还是报错。

有什么方法可以告诉 NBuilder 拦截那个 getter,或者我如何在它尝试评估它之前设置 User 属性? (从而防止错误)。

最佳答案

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

在您的情况下,这意味着要么根据您测试的内容返回 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();
}

然后您可以在特定测试中使用您想要的那个。

但是,如果您想测试获取的逻辑,我会采用不同的方式。

另外还有一个涉及此问题的 NBuiler google 代码问题:

https://code.google.com/p/nbuilder/issues/detail?id=79

关于c# - 如何让NBuilder在生成对象时拦截getter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11130781/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com