编写集成测试以测试数据库、web服务调用

本文关键字:web 服务 调用 数据库 测试数据 集成测试 测试 | 更新日期: 2023-09-27 18:15:46

我们刚刚开始编写集成测试来测试数据库、数据访问层、web服务调用等。目前我有一些想法来编写集成测试1)总是在初始化函数中重新创建表。2)如果你在同一个函数中保存new,一定要清除函数内的数据。

但是我想知道更多好的做法

编写集成测试以测试数据库、web服务调用

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

而且,测试代码经常被忽视,因为不是真正的代码,因此没有得到适当的维护…比代码更重要。至少应该在测试的体系结构中进行同样多的设计。计划合理的抽象层次,例如,如果你正在测试一个web应用程序,考虑这样的层次:浏览器交互的抽象,页面上组件的抽象,页面和测试的抽象。测试与页面和组件交互,页面与组件交互,组件与浏览器交互层交互,浏览器交互层与您的(可能是第三方)浏览器自动化库交互。

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

如果您的团队对测试不熟悉,那么有许多编码katas旨在教导良好测试的重要性(并且从中产生良好的代码),他们通常关注单元测试级别,然而许多原则是相同的。

一般来说,我建议您考虑模拟数据库访问层和web服务调用类,以使其更易于测试。关于这个主题有很多书,比如Osherove的The Art of Unit Testing

已经说过,集成测试应该是可重复的。因此,我将选择选项1,编写一个可以使用测试数据从头重新创建数据库的脚本。选项2比较困难,因为很难确保清理函数不会留下不需要的数据残留物。

在对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();
}