【问题标题】:C#: catch test failure during classcleanupC#:在 classcleanup 期间捕获测试失败
【发布时间】:2010-12-19 01:29:46
【问题描述】:

是否可以在 ClassCleanup 中嵌套 TestMethods 并让它们像 TestMethods 一样运行/表现,而不是常规方法调用?

我有一个 TestClass 来测试我为管理进程而创建的 AppMngr 类。我测试了打开/关闭应用程序的能力(例如 MyNotepadMngrClass.Open() 和 ...Close())。我还有几个在该进程中工作的类(例如 MyNotepadWorkerClass.WriteLine() 或 ...DoSomething() )。在测试其他类时,我需要启动记事本并在完成后关闭它。 ClassInitialize/ClassCleanup 是显而易见的地方。但我想确认记事本已关闭。

所以我为关闭操作创建了一个静态 [TestMethod]。我从 MyNotepadWorkerTestClass 中的 ClassCleanup 调用它。它可以很好地执行关闭操作。但如果我添加类似 -- Assert.IsFalse(true); -- 在我的 close 方法的主体中,测试运行不会失败。

如果我试图做的事情根本上错误,请告诉我。感谢您提供任何帮助。

附:嘿 TestStand 伙计们,我正在寻找 RunSelectedStep 期间的 Setup/Ceanup 行为。 TestDriven.NET 给了我 RunSelectedStep。那么如何在 ClassInitialize 和 ClassCleanup 期间捕获失败。

【问题讨论】:

  • 没有一些源代码很难回答这个问题。 “断言.IsFalse(真);”如果在 try...catch(Exception) 块中执行,不会使测试失败,因为失败的断言通过 AssertExceptions 传播(至少在 nunit 中)。如果 AssertExceptions 被 catch(Exception) 捕获,nunit 将不会得到它。
  • 假设没有抛出异常的简单情况,即。其中 Assert.IsFalse(true) 会像您预期的那样失败。
  • 我不确定我是否理解您在 TestStand 方面的问题...如果您右键单击 TestStand 中的一个步骤并使用“运行选定步骤”选项,它实际上会运行所有步骤在设置和清理步骤组中...这不是您要找的吗?
  • @JJ,在 TS 中,您可以将 TestSteps(或本例中的 TestMethods)放在设置和清理步骤组中。

标签: c# unit-testing


【解决方案1】:

ClassCleanup 的定义是“在测试类中的所有测试都运行之后”(from msdn)使用,因此您可能无法在其中添加新的测试方法。您需要重新构建测试。

【讨论】:

  • 当然我不是第一个需要这个的人。
  • 这取决于 - 从技术上讲,您要求能够在测试结束后运行测试。如果你的意思是你的 Close at end of test 方法——我只是在你的测试类中有一个 Close 方法,它在其他测试方法的末尾被调用(没有看到代码很难准确地说出来),而不是在 ClassCleanup归因方法。您只需要注意 ClassCleanup 的含义——特别是在您的测试环境中。
  • 我明白你在说什么。也许我想要的可以通过测试列表更好地实现,我可以在测试列表的任一端进行设置测试和清理测试。我不会回答它,希望有一个更有创意的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-24
  • 1970-01-01
  • 2023-04-07
  • 2017-05-19
  • 1970-01-01
相关资源
最近更新 更多