Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 编写集成测试以测试数据库、web服务调用_C#_Testing_Integration Testing - Fatal编程技术网

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

C# 编写集成测试以测试数据库、web服务调用,c#,testing,integration-testing,C#,Testing,Integration Testing,我们刚刚开始编写集成测试来测试数据库、数据访问层、Web服务调用等。 目前我有一些想法来编写集成测试,比如 1) 始终在初始化函数中重新创建表。 2) 如果要在同一函数中保存新数据,请始终清除函数中的数据 但我想知道一些更好的实践。与所有测试一样,必须从已知状态开始,测试完成后,清除到干净状态 此外,测试代码经常被忽略为非真实代码,因此无法正确维护它比代码更重要。至少在测试的架构中应该包含同样多的设计。规划合理的抽象层次(即,如果你正在测试一个Web应用程序,考虑这样的层次:你的浏览器交互的抽象

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


但我想知道一些更好的实践。

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

此外,测试代码经常被忽略为非真实代码,因此无法正确维护它比代码更重要。至少在测试的架构中应该包含同样多的设计。规划合理的抽象层次(即,如果你正在测试一个Web应用程序,考虑这样的层次:你的浏览器交互的抽象,你的组件在页面上的抽象,页面的抽象和你的测试)。测试与页面和组件交互,页面与组件交互,组件与浏览器交互层交互,浏览器交互层与您(可能是第三方)的浏览器自动化库交互

如果您的测试代码没有得到正确的维护或精心考虑,那么它们将成为编写新代码的障碍,而不是帮助


如果您的团队是测试新手,那么有许多团队的目标是教授好的测试的重要性(好的代码就是从中产生的),他们通常专注于单元测试级别,但是许多原则是相同的。

一般来说,我建议您考虑模拟数据库访问层和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();
}

可能有疑问我确实读过那篇文章,但更多的是关于区分快速测试和慢速测试。@alice7,我很高兴这回答了你的问题。你的问题不清楚你想要什么。看起来您需要一些关于如何构造单元测试类的建议。我需要一些关于构造集成测试的帮助,以及一些关于使用独立测试数据库等的建议。