首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >依赖NUnit单元测试的顺序是否是不好的形式

依赖NUnit单元测试的顺序是否是不好的形式
EN

Stack Overflow用户
提问于 2009-01-30 23:33:31
回答 8查看 3.3K关注 0票数 15

我一直在疯狂地创建单元测试,并发现我经常不得不在一个测试中设置一些东西,而这些东西是我在以前的测试中刚刚拆除的。在一次测试(例如,插入测试)中创建一些东西(例如,数据库记录),然后将其用于后续测试(例如,删除测试),这是否合理?或者,每个测试都应该完全独立吗?

您甚至可以确定NUnit中测试的顺序,或者它们总是按字母顺序进行吗?

注意:我特别询问的是一个测试文件中测试的顺序。不是跨测试文件,也不是以任何更全局的方式。

更新:感谢每个回答的人-有很多好的答案,小组的感觉是相当一致的。我选择了John Nolan的答案,因为他提供了最完整的解释和大量的链接。正如您可能已经猜到的,我一直强烈地想要打破这个规则,尽管我认为它可能像John所说的那样有点“难闻”。还要感谢Fortyrunner添加了单元测试标签。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2009-01-30 23:58:03

依赖于测试的顺序表明您在多个测试之间保持状态。这是

一种更干净的测试方法是,您只需要依赖于您想要检查其行为的单个功能。通常,您需要对其他对象执行mock操作,以使被测方法正常工作。

考虑处理单元测试的一个好方法是Arrange, Act, Assert模式。

下面是Karl Seguin的优秀的免费eBook的一个片段。我已经注意到了安排,行动和断言。

代码语言:javascript
复制
[TestFixture] public class CarTest 
{ 
    [Test] public void SaveCarCallsUpdateWhenAlreadyExistingCar()   
    {
         //Arrange
         MockRepository mocks = new MockRepository();
         IDataAccess dataAccess = mocks.CreateMock<IDataAccess>();   
         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();
    } 
}
票数 10
EN

Stack Overflow用户

发布于 2009-01-30 23:40:24

查看test fixture setups,它允许您指定将在fixture中的任何测试之前执行的函数。这允许您执行一次通用设置,并且它将始终运行,无论您是运行一个测试,还是运行套件中的所有测试。

票数 11
EN

Stack Overflow用户

发布于 2009-01-30 23:41:42

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

如果您的单元测试受到expensive set-up的影响,那么当您认为您正在进行单元测试时,您可能正在进行集成测试。如果您正在访问大多数单元测试中的SQL数据库,那么您实际上是在与数据访问层进行集成测试。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/497699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档