当前位置:  开发笔记 > 数据库 > 正文

依靠NUnit单元测试的顺序是不好的形式

如何解决《依靠NUnit单元测试的顺序是不好的形式》经验,为你挑选了4个好方法。

我一直在疯狂地创建单元测试,发现我经常需要在一次测试中设置一些我刚刚在之前的测试中被删除的测试.在一次测试中创建一些东西(例如数据库记录)是否合理(例如插入测试)然后用它来进行后续测试(例如删除测试)?或者每个测试是否应该完全独立?

您甚至可以确定NUnit中的测试顺序还是按字母顺序完成?

注意:我特别询问一个测试文件中的测试顺序. 跨测试文件或以任何方式更全局.

更新:感谢所有回答的人 - 有很多很好的答案,团队的感觉非常一致.我选择了John Nolan的答案,因为他提供了最全面的解释和很多链接.正如你可能已经猜到的那样,尽管我认为像约翰所说的那样可能有点"臭",但我一直非常想要打破这个规则.还要感谢Fortyrunner添加单元测试标签.



1> Tai Squared..:

查看测试夹具设置,允许您指定在夹具中的任何测试之前执行的功能.这允许您进行一次常规设置,无论您运行一个测试还是套件中的所有测试,它都将始终运行.



2> Johnno Nolan..:

依赖于测试的顺序表明您在测试中保持状态.这很

更简洁的测试方法是您只依赖于要检查其行为的单一功能.通常,您可以模拟 所需的其他对象,以使您的测试方法正常运行.

考虑接近单元测试的一种好方法是Arrange,Act,Assert模式.

以下是Karl Seguin优秀免费电子书的片段.我已经注释了安排,行为和断言.

[TestFixture] public class CarTest 
{ 
    [Test] public void SaveCarCallsUpdateWhenAlreadyExistingCar()   
    {
         //Arrange
         MockRepository mocks = new MockRepository();
         IDataAccess dataAccess = mocks.CreateMock();   
         ObjectFactory.InjectStub(typeof(IDataAccess), dataAccess); 
         //Act
         Car car = new Car(); 
         Expect.Call(dataAccess.Save(car)).Return(389); 
         mocks.ReplayAll(); 
         car.Save(); 
         mocks.VerifyAll(); 
         // Assert
         Assert.AreEqual(389, car.Id); 
         ObjectFactory.ResetDefaults();
    } 
}



3> Jeffrey Hant..:

单元测试旨在独立运行,而不是作为顺序脚本运行.如果您确实需要它们按顺序运行,请将它们收集到一个测试函数中.

如果您的单元测试遭受昂贵的设置,那么当您认为您正在进行单元测试时,您可能正在进行集成测试.如果您在大多数单元测试中遇到SQL数据库,那么您实际上是在与数据访问层进行集成测试.



4> jrcs3..:

我认为每个测试完全独立于任何其他测试.即使你可以强制执行测试的顺序,当测试必须改变时,这将是一个维护噩梦.

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有