【问题标题】:MSTest: CS0117 'Assert' does not contain a definition for 'ThrowsException'MSTest:CS0117“断言”不包含“ThrowsException”的定义
【发布时间】:2020-02-16 04:31:34
【问题描述】:

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

这一行:

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

因编译错误而失败:

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

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

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

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

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


正如 Clint 所说的 below,我需要从 NuGet 安装 MSTest v2 才能在 MSVS 2015 中使用 Assert.ThrowsException&lt;T&gt;()

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

MSVS > 测试 > 全部运行(或“测试 > 调试 > 所有测试”):

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

有什么建议吗?

【问题讨论】:

  • 假设你注释掉这个检查,其他Assert.xxx() 调用是否有效? Assert 是来自Microsoft.VisualStudio.TestTools.UnitTesting 的实际类,还是偶然一个名为Assert 的不同类?哪个版本的库链接在您项目的“参考”部分?

标签: c# mstest vs-unit-testing-framework


【解决方案1】:

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

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

现在您在 VS2015 上,您可以从 Nuget 安装此软件包 MSTest.Test,但请确保删除旧的测试引用在升级到这个包之前喜欢Microsoft.VisualStudio.QualityTools.UnitTestFramework

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

之后你应该可以使用Assert.ThrowsException&lt;ArgumentOutOfRangeException&gt;(

discover and execute 的测试也要确保安装 MSTest.TestAdapter。

进一步Reading

【讨论】:

  • 谢谢。这是有道理的:MSVS 2015 中的编译错误(MSTest V2 尚不存在)和 MSVS 2019 中也失败(因为在 MSVS 2019 中创建的项目保留了 MSTest V1 依赖项)。我安装了 V2.1从 NuGet,删除了旧的 V1 引用......现在一切都可以编译了。耶!。新问题:“MSVS > 运行所有测试”> Discover test finished: 0 found (0:00:01.127375) 。它不再找到任何测试 :( 我从头开始删除并重建了所有内容,但仍然不行 :( 问:有什么建议吗?
  • 啊,好吧,看来你需要安装 MSTest.TestAdapter
  • 宾果游戏:就是这样。我需要安装两个 NuGet 包(MSTest.TestFramework v2.1.0 AND MSTest.TestAdapter v2.1.0)。现在一切正常。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多