gpt4 book ai didi

c# - AutoFixture 和私有(private)属性

转载 作者:可可西里 更新时间:2023-11-01 09:08:56 27 4
gpt4 key购买 nike

我可以指导AutoFixture填充所有类的私有(private)属性,并用特定属性(如 Ninject.Inject)进行注释?来源似乎只扫描公共(public)属性(property):1 .此问题为具有私有(private) setter 的特定 MyClass 提供了解决方案,但不适用于私有(private)属性或所有类:2 .

我正在使用 Moq 来模拟服务,最后我想用这些模拟来填充属性。如果我将 MyService 依赖项公开为 public,则以下设置工作正常。

一些示例代码:

public class MyController {
[Inject]
private IMyService MyService { get; set; }

public void AMethodUsingMyService() {
MyService.DoSomething();
// ...
}

// ...
}

public class MyService : IMyService {
public void DoSomething()
{
// ...
}

// ...
}

public class MyControllerTest {
[Theory]
[AutoMoqData]
public void MyTest(MyController controller) {
controller.AMethodUsingMyService();
}
}

最佳答案

AutoFixture 没有为非公共(public)字段或属性赋值的内置支持。这是设计使然。

AutoFixture 是一个用于单元测试和单元测试的实用程序库 shouldn't directly invoke private membersSUT .

AutoFixture 最初是作为测试驱动开发 (TDD) 的工具构建的,而 TDD 就是反馈。本着GOOS的精神,你应该听你的测试。如果测试很难编写,您应该考虑您的 API 设计。 AutoFixture 倾向于放大这种反馈,所以我的第一 react 是挑战想要这样做的动机。

由于您引用的是 NInject,所以看起来您正在使用依赖注入(inject) (DI)。然而,带有私有(private)属性注入(inject)的 DI 听起来很奇特。考虑将属性公开,或者更好,使用构造函数注入(inject)而不是属性注入(inject)。

这将使 AutoFixture 像 Auto-Mocking Container 一样自动工作.

但是,AutoFixture 是一个可扩展性很强的库,所以如果您真的必须这样做,应该可以编写一个可以写入私有(private)属性的扩展,但这不会是最简单的曾经编写过的 AutoFixture 扩展。

关于c# - AutoFixture 和私有(private)属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22707369/

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