2011-11-23 125 views
4

我们刚开始写集成测试,以测试数据库,数据访问层,Web服务调用等 目前,我有一些想法写集成测试,如 1)总是重新创建表在初始化函数中。 2)如果您在同一功能中保存新内容,请务必清除功能内的数据。编写集成测试,测试数据库,Web服务调用

但我想知道一些更好的做法。

+0

可能dublicate http://stackoverflow.com/questions/1328730/integration-testing-best-practices –

+0

我看过那个帖子,但更多的是关于分离快速和慢速测试。 – alice7

回答

1

当单元测试DAL,我不喜欢这样写道:

[TestFixtureSetUp] 
public void TestFixtureSetUp() 
{ 

    //this grabs the data from the database using an XSD file to map the schema 
    //and saves it as xml (backup.xml) 
    DatabaseFixtureSetUp(); 
} 

[SetUp] 
public void SetUp() 
{ 

    //this inserts test data into the database from xml (testdata.xml) 
    //it clears the tables first so you have fresh data before every test. 
    DatabaseSetUp(); 
} 

[TestFixtureTearDown] 
public void TestFixtureTearDown() 
{ 
    //this clears the table and inserts the backup data into the database 
    //to return it to the state it was before running the tests. 
    DatabaseFixtureTearDown(); 
} 
+0

@ alice7,我很高兴这回答了你的问题。从你的问题中不清楚你想要什么。看起来你想要关于如何构建单元测试类的建议。 – neontapir

+0

我希望能够帮助您构建集成测试以及使用独立测试数据库等一些建议。 – alice7

5

如同所有的测试,就必须从已知状态一个启动,并在测试完成,明确降到干净的状态

此外,测试代码经常被忽视,因为不是真正的代码,因此不能正确维护... 它比代码更重要。至少同样多的设计,应该进入你的测试架构。规划合理的抽象级别,例如,如果您正在测试Web应用程序,请考虑具有这样的层级:抽象化您的浏览器交互,抽象页面上的组件,抽象页面和测试。测试与页面和组件交互,页面与组件交互,组件与浏览器交互层交互,浏览器交互层与您的(可能是第三方)浏览器自动化库进行交互。

如果您的测试代码没有得到适当的维护或经过深思熟虑,那么它们会成为一种障碍,而不是编写新代码的帮助。

如果你的团队是新的测试,有很多coding katas在那里,旨在教的良好测试(进出这是以良好的代码),他们一般集中在一个单元测试水平的重要性,但是许多校长是一样的。

2

一般来说,我建议你看看嘲笑你的数据库访问层和Web服务调用类,以使其更具可测性。关于这个问题有很多书籍,如Osherove的单元测试艺术

之前已经说过,集成测试应该是可重复的。因此,我会选择选项1来编写一个脚本,该脚本可以从头开始用测试数据重新创建数据库。选项2比较困难,因为它很难确定清洁功能不会留下不必要的数据残留。