【问题标题】:Writing Integration tests to test database, web service calls编写集成测试以测试数据库、Web 服务调用
【发布时间】:2011-11-23 17:38:36
【问题描述】:

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

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

【问题讨论】:

标签: c# testing integration-testing


【解决方案1】:

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

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

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

如果您的团队不熟悉测试,有很多 coding katas 旨在教授良好测试的重要性(由此产生良好的代码),他们通常专注于单元测试级别,但是很多校长是一样的。

【讨论】:

    【解决方案2】:

    一般来说,我建议您考虑模拟您的数据库访问层和 Web 服务调用类,以使其更具可测试性。有很多关于这个主题的书籍,比如 Osherove 的单元测试的艺术

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

    【讨论】:

      【解决方案3】:

      在对 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,很高兴这回答了你的问题。从你的问题中不清楚你想要什么。看起来你想要一些关于如何构建单元测试类的建议。
      • 我希望在构建集成测试方面获得帮助,并获得一些建议,例如使用单独的测试数据库等。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-24
      • 2018-11-18
      • 1970-01-01
      • 2012-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多