编写集成测试来测试数据库,Web服务调用

时间:2011-11-23 17:38:36

标签: c# testing integration-testing

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

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

3 个答案:

答案 0 :(得分:5)

与所有测试一样,必须从已知状态开始,并在测试完成后,清除清洁状态

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

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

如果您的团队不熟悉测试,那么有许多coding katas旨在教授良好测试的重要性(并且这是好的代码),他们通常关注单元测试级别,但是许多校长都是一样的。

答案 1 :(得分:2)

一般情况下,我建议您研究模拟数据库访问层和Web服务调用类,以使其更易于测试。关于这个主题有很多书,比如Osherove的 The Unit of Unit Testing

话虽如此,集成测试应该是可重复的。因此,我会选择选项1,编写一个可以从头开始使用测试数据重新创建数据库的脚本。选项2更难,因为很难确定清洁功能不会留下不需要的数据残留。

答案 2 :(得分: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();
}