编写集成测试以测试数据库、web服务调用
本文关键字:web 服务 调用 数据库 测试数据 集成测试 测试 | 更新日期: 2023-09-27 18:15:46
我们刚刚开始编写集成测试来测试数据库、数据访问层、web服务调用等。目前我有一些想法来编写集成测试1)总是在初始化函数中重新创建表。2)如果你在同一个函数中保存new,一定要清除函数内的数据。
但是我想知道更多好的做法
与所有测试一样,必须从已知状态开始,并在测试完成后清除到干净状态。
而且,测试代码经常被忽视,因为不是真正的代码,因此没有得到适当的维护…比代码更重要。至少应该在测试的体系结构中进行同样多的设计。计划合理的抽象层次,例如,如果你正在测试一个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();
}