AutoFixture - 如何调用方法,如何设置自动属性的私有设置器?

发布于 2024-11-02 12:02:59 字数 211 浏览 4 评论 0原文

这是我的课程:

public MyClass {
  public int Id { get; private set; }
  public SetAssignableId (int id) {
    this.Id = id;
  }
}

我想让 AutoFixture 通过 SetAssignableId 或私有设置器设置 Id。

Here's my class:

public MyClass {
  public int Id { get; private set; }
  public SetAssignableId (int id) {
    this.Id = id;
  }
}

I would like to have AutoFixture set the Id via SetAssignableId or the private setter.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

辞慾 2024-11-09 12:02:59

目前无法使用 AutoFixture 调用私有设置器。尽管它在内部使用反射,但在设计上它尊重类型的公共 API。

如果您仔细阅读工作项目,问题板上有一个未完成的请求,以使其更具可定制性您将看到有一个启用受保护设置器填充的请求。

但是,根据给出的示例,当然可以调用 SetAssignableId 方法。像这样的自定义应该可以解决问题:

fixture.Customize<MyClass>(c => 
    c.Do(mc => 
        mc.SetAssignableId(fixture.CreateAnonymous<int>())));

There's no way to invoke a private setter with AutoFixture today. Although it uses reflection internally, by design it respects a type's public API.

There's an outstanding request on the Issue Board to make this more customizable - if you read the work item closely you will see that there's a request to enable filling of protected setters.

However, with the example given, it's certainly possible to invoke the SetAssignableId method. A Customization like this should do the trick:

fixture.Customize<MyClass>(c => 
    c.Do(mc => 
        mc.SetAssignableId(fixture.CreateAnonymous<int>())));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文