8

这很奇怪,但是前几天突然ExpectedExceptionAttribute停止为我工作。不知道出了什么问题。我正在并排运行 VS 2010 和 VS 2005。它在 VS 2010 中不起作用。这个测试应该通过,但是它失败了:

[TestMethod]
[ExpectedException(typeof(ArgumentNullException))]
public void Test_Exception()
{
    throw new ArgumentNullException("test");
}

有任何想法吗?这真的很糟糕。

4

5 回答 5

12

不是要复活死线,而是突然发生在我身上时遇到了这个,以防它可以帮助其他人。我终于找到了问题所在,这可能与 Jon 的发现有关。ExpectedException 属性似乎仅在项目被识别为 TestProject 时才起作用。(不仅仅是一个 .Net 程序集)

卸载项目,编辑 csproj 文件并检查是否存在以下设置:

<ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>

(假设VS2010项目)重新加载项目并重建。ExpectedException 测试现在应该通过了。

我们在将测试从 NUnit 标准化到 MSTest 时遇到了这个问题(感谢 TFS CI Build),发现在用 [ExpectedException(Type)] 废话替换 Assert.Throws<> 美丽的简单性和灵活性之后,(更不用说丢失 [TestCase( )]!) ExpectedException 测试无缘无故失败。使用 ExpectedException 切换回 NUnit,没问题,MSTest 拒绝运行它。

不用说,我会努力让 NUnit 回来,在找到:http: //blog.shawnewallace.com/2011/02/running-nunit-tests-in-tfs-2010.html

于 2012-04-16T01:15:40.250 回答
2

这个线程出现在谷歌搜索上,因为我今天也遇到了这个问题,但出于不同的原因,我将在这里添加另一个可能的分析器。

我对具有该属性的某些功能进行了单元测试[ExpectedException],但是最近的代码更新使该功能经过测试async以提高性能。

这导致这些单元测试失败。简单的解决方案是也使单元测试异步,返回 Task 并等待函数调用:

[TestMethod]
[ExpectedException(typeof(Exception))]
public async Task UnitTestAnAsyncFunction()
{
    await sut.DoStuffAsync();

    //Assert
    //ExpectedException
} 
于 2015-08-07T14:11:52.547 回答
2

我有另一个答案,不需要编辑 csproj 文件。似乎根本原因只是缺少参考。我添加Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll到项目的引用和using Microsoft.VisualStudio.TestTools.UnitTesting;代码文件中。该dll可以在

C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\PublicAssemblies\

或者

C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\PublicAssemblies\

我希望我可以帮助任何人节省一些时间。

于 2016-06-23T09:05:41.280 回答
1

我遇到了同样的问题,但最终设法让它工作。不太确定如何,但这里列出了我在它不工作到它再次开始工作之间所做的事情。

  • 将正在测试的项目转换为 .NET 4
  • 关闭代码覆盖
  • 再次打开 CodeCoverage
  • 对测试项目进行了 RebuildAll

不确定是哪个位修复了它。无论如何,希望这会有所帮助!

于 2010-04-18T10:22:20.660 回答
0

另一个答案。今天我将一个 Visual Studio 2008 (net35) MSTest 项目升级到 Visual Studio 2017 (net462)。Marcel Kalinowski的回答提到了一个缺失Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll- 在我的情况下,它在那里,但参考指向旧的 VS2008 版本,而其余的已经升级。没有感叹号,没有编译错误,所有单元测试都按预期工作,除了那些具有[ExpectedException]属性的单元测试。

删除引用并添加当前版本(对我来说是 10.0.0.0)使这些测试再次起作用。

于 2018-10-01T09:20:24.753 回答