我在 MSTest 项目中使用 NUnit 断言,如下所示(注意:这无关紧要,请参阅对 Dave Falkner 的回答的评论):
using Microsoft.VisualStudio.TestTools.UnitTesting;
using MSTestExtensions;
using Assert = NUnit.Framework.Assert;
using Is = NUnit.Framework.Is;
这在我的单元测试中效果很好,但在我的集成测试中我遇到了一些麻烦。我认为这可能是由于 MSTestExtensions 因为我的单元测试没有使用它。此外,如果我注释掉 MSTestExtensions using 语句、类上的继承 MSTestExtensionsTestFixture 语句和[TestTransaction]
属性,我就没有这个问题。重新添加 using 语句不会导致问题。添加 [TestTransaction] 属性不会导致问题。一旦我从测试类的 MSTestExtensionsTestFixture 继承,问题就会出现。
基本上,问题是当我在失败的情况下执行以下代码时(例如包含两个部分的actualPartNumbers 列表,而预期列表只包含一个),MSTest 未处理 AssertionException。
Assert.That(actualPartNumbers, Is.EquivalentTo(expectedPartNumbers));
因此 IDE 在抛出异常时停止,而不是使测试失败。有时这不会发生,测试会正常失败。但在大多数情况下,IDE 会在抛出的异常处停止。有任何想法吗?
仅供参考:
我正在使用 MSTestExtensions 以便[TestTransaction]
在每次测试后进行数据库回滚(属性)。这类似于 MbUnit 的回滚功能。我用 NUnit 覆盖 MSTest 的断言,因为我更喜欢流利的风格。最后,我正在使用 MSTest,因为我遇到了 NUnit 问题。特别是与 Microsoft Moles 以及与使用 log4net 的第三方引用的冲突。我正在尽力设置单元/集成测试,以便在我切换时能够在任一框架中运行。但目前 MSTest 似乎是最省事的,而且在 IDE 中的集成非常好。