MSTest:CS0117 'Assert' 不包含 'ThrowsException' 的定义

MSTest: CS0117 'Assert' does not contain a definition for 'ThrowsException'

我正在使用 C#、MSVS 2015 和 .Net 4.6.1 使用 MSTest 编写一些单元测试。

这一行:

Assert.ThrowsException<ArgumentOutOfRangeException>( () => 
  select.AllSelectedOptions[0]
);

因此编译错误而失败:

CS0117 'Assert' does not contain a definition for 'ThrowsException'

我的命名空间是 Microsoft.VisualStudio.TestTools.UnitTesting(在 MSVS 中创建单元测试项目时的默认命名空间)。

根据文档,Assert.ThrowsException(Action) 应该存在。但是我在 Intellisense 中看不到它...我遇到了编译错误。

我尝试了几个不同版本的 MSVS(MSVS 2015 和 MSVS 2019)和几个不同版本的 MSTest。

问:有什么想法可能是错误的吗?


正如克林特所说 , I need to install MSTest v2 来自 NuGet 以便在 MSVS 2015 中使用 Assert.ThrowsException<T>()

但是在这样做之后,MSVS 不再找到我的任何测试:

MSVS > 测试 > 运行 全部(或 "Test > Debug > All Tests"):

------ Discover test started ------
========== Discover test finished: 0 found (0:00:01.127375) ==========

有什么建议吗?

您需要使用 [MSTest V2] 才能 Assert.ThrowsException

VS2017 开始,内置 单元测试 项目模板仅使用 MSTest V2。

现在您使用的是 VS2015,您可以从 Nuget[安装此包 MSTest.Test =40=] 但请确保在升级到此包之前删除旧的测试引用 Microsoft.VisualStudio.QualityTools.UnitTestFramework

添加 > 新建测试项目 > Select MSTest 项目类型

之后你应该可以使用 Assert.ThrowsException<ArgumentOutOfRangeException>(

到discover and execute 测试也确保安装MSTest.Test适配器。

进一步Reading