C#测试 - 为什么ExpectedException标记的方法在未抛出异常时传递?

时间:2009-05-10 20:36:19

标签: c# unit-testing silverlight-2.0

在过去,我测试过这样的预期异常:

[TestMethod]
public void TestThrowsException() {
  try {
    Foo();
    Assert.Fail();
  } catch (MyException ex){//good
  }
}

但是我注意到有一种(更干净的?)方法可以使用ExpectedException属性来测试它。为什么在未抛出异常时传递此测试方法?当然这会破坏属性的目的。

[TestMethod]
[ExpectedException(typeof(MyException))]
public void TestThrowsException() {
}

[编辑]我正在使用Silverlight 2运行此测试

4 个答案:

答案 0 :(得分:4)

我从来没有见过那个传球 - 那是真的你所拥有的一切吗?您确定 将其标记为TestMethod吗?测试跑者是否表明它正在通过?你肯定得到了最新的代码吗?

我会仔细检查,但我相信这会失败......

答案 1 :(得分:1)

Jon Skeet其实是对的,我确实有一个旧版本的测试框架。我更新到了08年12月发布的http://code.msdn.microsoft.com/silverlightut/Release/ProjectReleases.aspx?ReleaseId=1913,并在使用ExpectedException进行标记时获得了预期的行为。

答案 2 :(得分:0)

我实际上经历过ReSharper 4.5 testrunner在NUnit 2.5中不能与ExpectedException一起使用。 ...但是这看起来像MSTest ...你能详细说明你正在使用哪个测试框架以及你用来执行测试的测试运行器吗?

答案 3 :(得分:0)

你应该使用'ExpectedException'和一个额外的assert.fail,以便在没有抛出异常的情况下测试失败(仍然在VS 2010中使用.net 4和Microsoft.VisualStudio.QualityTools.UnitTestFramework):

[TestMethod]
[ExpectedException(typeof(MyException))]
public void TestThrowsException() {

    Do.SomethingThatThrowsAnException();
    assert.fail("No exception ;-(");

}