【问题标题】:What are the best practices in your tests?您的测试中的最佳实践是什么?
【发布时间】:2010-09-17 04:13:57
【问题描述】:

我想知道您在测试课程时的做法。

例如,我喜欢在我的固定装置中使用继承。 给定两个类 BaseClass、SubClass,我创建了另外两个类 BaseClassFixture 和 SubClassFixture(SubClassFixture 是 BaseClassFixture 的子类)。所以我确信我不会破坏使用 SubClass 作为 BaseClass 的代码(扩展我的类的人可以通过创建我的夹具的另一个子类来确定他们是否做对了)。

我也使用接口进行夹具继承。 例如,当我为 IList 创建一个夹具时,我检查任何 Add,Count 是否加一。 当我有一个实现 IList 的具体类时,我只需创建一个名为 MyConcreteClassIListFixture 的夹具。

在这种情况下,我的接口的夹具是抽象的,我让我的子类为我的测试创建实例。

我认为这是一种契约式设计(参见 Bertrand Meyer),因为我会在任何测试之前和之后检查不变量。

我这样做尤其是对已发布的接口或类。

而你……你的做法是什么??

【问题讨论】:

标签: unit-testing testing


【解决方案1】:

编写单元测试时有几件重要的事情。

1) 单元测试应该是独立的:

单元测试必须是独立的。这意味着你的单元测试不应该依赖于外部的东西来运行。这包括互联网连接、外部网络服务等。

2) 单元测试应该很快:

单元测试应该运行得很快。您可以通过多种方式编写单元测试。其中一些包括数据访问,即使您不需要访问数据来运行测试。您始终可以使用模拟对象并模拟数据访问层。

3) 良好的命名约定:

单元测试应该具有良好的命名约定,并且应该像故事一样阅读。

这是一个例子:

公共课when_user_transfer_money_from_source_account_to_destination_account

public void make_sure_error_is_throw_when_source_account_has_insufficient_funds() {

}

这是一个很好的截屏视频,涵盖了上述许多要点:

http://screencastaday.com/ScreenCasts/32_Introduction_to_Mocking.aspx

【讨论】:

    【解决方案2】:

    我最重要的规则是每个测试都应该是原子的,并且不应该以特定的顺序运行。

    对于单元测试,它们应该严格遵守关注点分离。 对于集成测试,我会特别注意确保它们遵循最重要的规则。

    此外,测试应尽可能遵循 DRY 规则以及代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-16
      • 2019-03-16
      • 2017-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-03
      相关资源
      最近更新 更多