IDE在抛出AssertionException时停止,而不是在测试失败。 (MSTestExtensions罪魁祸首?)

时间:2010-10-12 13:33:25

标签: unit-testing nunit mstest integration-testing unhandled-exception

我在MSTest项目中使用NUnit断言,如下所示(注意:这对Dave Falkner的回答是否无关紧要):

using Microsoft.VisualStudio.TestTools.UnitTesting;
using MSTestExtensions;
using Assert = NUnit.Framework.Assert;
using Is = NUnit.Framework.Is;

这在我的单元测试中效果很好,但在我的集成测试中我遇到了一些麻烦。我认为这可能是由于MSTestExtensions,因为我的单元测试没有使用它。另外,如果我使用语句注释掉MSTestExtensions,继承类的MSTestExtensionsTestFixture语句和[TestTransaction]属性,我就没有这个问题。重新添加using语句不会导致问题。添加[TestTransaction]属性不会导致问题。一旦我从测试类的MSTestExtensionsTestFixture继承,问题就出现了。

基本上,问题是当我在失败的情况下执行以下代码时(例如包含两个部分的actualPartNumbers列表,而预期列表只包含一个),AsstionException将被MSTest处理。

Assert.That(actualPartNumbers, Is.EquivalentTo(expectedPartNumbers));

因此IDE停止在抛出异常,而不是测试失败。有时这不会发生,测试会正常失败。但在大多数情况下,IDE会在抛出的异常处停止。有什么想法吗?

供参考: 我正在使用MSTestExtensions,以便我可以在每次测试后执行数据库回滚([TestTransaction]属性)。这类似于MbUnit的回滚功能。我用NUnit覆盖了MSTest的断言,因为我更喜欢流畅的风格。最后,我正在使用MSTest,因为我遇到了NUnit的问题。特别是与Microsoft Moles和conflicts with third party references that use log4net。我正在尽力设置单元/集成测试,以便在我切换的情况下能够在任一框架中运行。但是现在MSTest似乎是最不麻烦的,IDE中的集成非常好。

1 个答案:

答案 0 :(得分:1)

它可能只是你用来启动测试的关键组合问题:ctrl + R,ctrl + T vs ctrl + R,T?

http://stevesmithblog.com/blog/run-mstest-without-breaking-on-exceptions-in-vs2010/