c# - 单元测试构造函数注入(inject)

标签 c# unit-testing dependency-injection constructor constructor-injection

假设我的 Foo 类有以下内容:

readonly IService service;

public Foo(IService service) 
{
    if (service == null)
        throw new ArgumentNullException("service");

    this.service = service;
}

public void Start()
{
    service.DoStuff();
}

到目前为止,我对构造函数进行了一次单元测试,我在其中传入 null 以验证是否抛出了 ArgumentNullException。我是否需要对我的构造函数进行第二次单元测试,在其中传递有效的 IService 并验证 this.service 是否已设置(这需要公共(public)访问器)?

或者我应该只依靠我的单元测试来测试 Start 方法来测试这个代码路径吗?

最佳答案

设置 this.service 是一个实现细节,因此您应该只测试它是否在预期的地方使用,并通过 Start 方法测试它。以免您的测试变得脆弱。

您只想测试您的服务是否得到适当使用。您不应该关心它是如何存储的。

关于c# - 单元测试构造函数注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15751602/

相关文章:

unit-testing - 在 Java 环境中创建自动化测试的最佳方式

android - 构造函数注入(inject) Dagger 2

c# - 把容器注入(inject)工厂可以吗?

ruby-on-rails - 使用已经声明的 Rails 模型

c# - 如何在 linq 查询中使用子字符串?

c# - asp.net core 问题添加第一个数据库迁移

c# - Azure Web 应用程序 - "HttpClient Unable to connect to the remote server"

C# .Trim 由于某种原因不工作

unit-testing - 测试驱动开发 : Writing tests for private/protected variables

c# - 对调用同一对象上的另一个公共(public)函数的函数进行单元测试的正确方法是什么?