【发布时间】:2011-11-23 17:38:36
【问题描述】:
我们刚刚开始编写集成测试来测试数据库、数据访问层、Web 服务调用等。 目前我有一些想法来编写集成测试,比如 1) 总是在初始化函数中重新创建表。 2) 如果您在同一个函数中保存新数据,请始终清除函数内的数据。
但我想知道更多好的做法。
【问题讨论】:
-
我确实读过那篇文章,但它更多的是关于区分快速和慢速测试。
标签: c# testing integration-testing
我们刚刚开始编写集成测试来测试数据库、数据访问层、Web 服务调用等。 目前我有一些想法来编写集成测试,比如 1) 总是在初始化函数中重新创建表。 2) 如果您在同一个函数中保存新数据,请始终清除函数内的数据。
但我想知道更多好的做法。
【问题讨论】:
标签: c# testing integration-testing
与所有测试一样,必须从已知状态开始,测试完成后,清除到干净状态。
此外,测试代码经常被视为不是真正的代码而被忽视,因此无法正确维护...... 它比代码更重要。至少同样多的设计,应该进入你的测试架构。规划合理的抽象级别,即,如果您正在测试一个 Web 应用程序,请考虑有这样的层:浏览器交互的抽象、页面上组件的抽象、页面和测试的抽象。测试与页面和组件交互,页面与组件交互,组件与浏览器交互层交互,浏览器交互层与您的(可能是第三方)浏览器自动化库交互。
如果您的测试代码没有得到妥善维护或经过深思熟虑,它们就会成为障碍,而不是帮助编写新代码。
如果您的团队不熟悉测试,有很多 coding katas 旨在教授良好测试的重要性(由此产生良好的代码),他们通常专注于单元测试级别,但是很多校长是一样的。
【讨论】:
一般来说,我建议您考虑模拟您的数据库访问层和 Web 服务调用类,以使其更具可测试性。有很多关于这个主题的书籍,比如 Osherove 的单元测试的艺术。
话虽如此,集成测试应该是可重复的。因此,我会选择选项 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();
}
【讨论】: