【问题标题】:ExpectedExceptionAttribute is not working in MSTestExpectedExceptionAttribute 在 MSTest 中不起作用
【发布时间】:2009-07-23 00:59:17
【问题描述】:

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

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

有什么想法吗?这真是太棒了。

【问题讨论】:

标签: c# visual-studio-2010 unit-testing mstest expected-exception


【解决方案1】:

不是让死线复活,而是突然发生在我身上时遇到了这个,以防它可以帮助其他人。我终于找到了问题所在,这可能与 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 拒绝运行它。

不用说,在找到:http://blog.shawnewallace.com/2011/02/running-nunit-tests-in-tfs-2010.html

【讨论】:

  • 嗨史蒂夫!回答老问题并不丢人,尤其是有这么好的答案!谢谢!
  • 我实际上是从 MsTest 内部使用 Nunit 构造 (Assert.throws) ;-)
  • 它在 VS2012 中也适用于我。但更奇怪的是:我有许多带有这个 ExpectedException 的普通类库,它们的工作方式就像一个魅力。即使是有问题的项目曾经工作过,它突然停止工作。
【解决方案2】:

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

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

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

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

    //Assert
    //ExpectedException
} 

【讨论】:

    【解决方案3】:

    我有另一个答案,不需要编辑 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\
    

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

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-02-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-05
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多