【问题标题】:C# How to create a unit test for verifying a value is in the code list?C#如何创建一个单元测试来验证一个值是否在代码列表中?
【发布时间】:2018-12-07 21:41:23
【问题描述】:

我有一个应用程序接收数据,验证它,如果没有发现错误,它会保存到数据库中,如果发现错误,它们会被报告,但没有任何东西进入数据库。

例如我有以下内容:

CREATE TABLE dimension
(
    dimension_code VARCHAR(10) NOT NULL PRIMARY KEY
);

CREATE TABLE fact_table
(
    fact_id        INT IDENTITY(1,1) NOT NULL,
    dimension_code VARCHAR(10)       NOT NULL,
    CONSTRAINT FK_fact_table 
        FOREIGN KEY (dimension_code) 
        REFERENCES dimension (dimension_code)
);

INSERT INTO dimension VALUES ('A');
INSERT INTO dimension VALUES ('B');

我的应用允许用户向 fact_table 添加一个值。该代码(尚未编码)应该验证用户尝试添加的值实际上是否在维度表中。如果不是,它将给出一个很好的拼写错误。如果是,则将其插入数据库并返回成功消息。

我从测试驱动开发开始,所以我想到了 2 个单元测试:

  1. 如果提交的值在代码列表中,则不报错。
  2. 如果提交的值不在代码列表中,则报错。

我有 Dimension 和 Fact 类。 Dimension 类是一个实体框架类,用于检查数据库值。 Fact 有一个 validate 方法,该方法将进行许多验证,包括即将编写的用于检查维度表中的值的验证。 应用程序中还有一个错误列表(错误是一个类)。

我开始了我的第一个单元测试,如果值不在维度表中,则会创建一个错误。但据我了解,单元测试不应该从数据库中读取。那么我应该怎么做,我是否创建一个虚假的值列表并将其与之进行比较?如果是这样,测试的目的是什么,它将始终通过,因为我正在创建列表和值,因此列表将具有 A、B、C 并且值将是 D,因为我将其硬编码到测试中.或者我应该从数据库中读取? 或者我的单元测试会创建一个 Fact 实例,为其分配一个无效值。调用 validate 就可以了。并且断言错误列表计数现在比以前大 1?但这将从数据库中读取,并且我的“无效”值将来可能会变得有效,测试会失败但我的代码仍然可以。我是不是没有以正确的视角看待事物?

【问题讨论】:

    标签: c# unit-testing tdd


    【解决方案1】:

    从创建应用界面开始。你想要点什么?我认为应该是某种AddFactValue(Fact fact) 方法?然后你编写一个测试来检查数据库会发生什么,以防你用不同的值运行这个方法。在这个过程中你会发现你是否做错了什么等等。

    然后,我想,你想添加你的验证器。为它创建接口并通过构造函数注入它。它只允许您为验证器编写测试。所以你做的和AddFactValue(...)一样。等等……

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-07
      • 1970-01-01
      • 1970-01-01
      • 2014-03-24
      • 2021-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多