您的测试中有哪些最佳实践?

时间:2008-10-14 19:10:18

标签: unit-testing testing

我想知道在测试课程时你的做法是什么。

例如,我喜欢使用继承,使用我的灯具。 给定两个类BaseClass,SubClass,我创建另外两个类BaseClassFixture和SubClassFixture(SubClassFixture是BaseClassFixture的子类)。所以我确信我不会破坏使用SubClass作为BaseClass的代码(扩展我的类的人可以确定他们是否正确,通过创建我的fixture的另一个子类)。

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

在这种情况下,我的界面的fixture是抽象的,我让我的子类为我的测试创建实例。

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

我特别使用已发布的接口或类来执行此操作。

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

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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

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

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

2)单元测试应该很快:

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

3)良好的命名惯例:

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

以下是一个例子:

public class when_user_transfer_money_from_source_account_to_destination_account

public void make_sure_error_is_thrown_when_source_account_has_insufficient_funds() {

}

这是一个很好的截屏视频,涵盖了以上几点:

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