ExpectedException没有捕获异常,但我可以用try catch捕获它

Jus*_*ook 2 c# unit-testing exception visual-studio

关于这个的任何想法?我正在尝试编写一个单元测试,它将删除一个项目并通过尝试通过其ID来检索项目来确认该项目不再存在于存储库中,该ID应该抛出DataAccessException.但是,测试仍然失败.我添加了一个try catch块,果然我抓住了我期待的异常.我正在使用VS测试工具进行单元测试.

    [ExpectedException(typeof(DataAccessException))]
    private static void NHibernateRepositoryBaseDeleteHelper<T, TKey>(T myItem, TKey myItemId)
    {
        MyTestRepository<T, TKey> myRepository = new MyTestRepository<T, TKey>();
        myRepository.Delete(myItem);
        myRepository.CommitChanges();
        try
        {
            myRepository.GetById(myItemId, false);
        }
        catch (DataAccessException dae)
        {
            Assert.IsTrue(true);
        }
    }
Run Code Online (Sandbox Code Playgroud)

mhe*_*384 5

我将通过指出"ExpectedException"属性糟透了,添加到Jared所说的内容中.没有办法断言异常的消息是正确的("消息"参数不会做你认为它做的事情)并且你不能在一次测试中检查多个异常.

更好的解决方案是做这样的事情:http: //geekswithblogs.net/sdorman/archive/2009/01/17/unit-testing-and-expected-exceptions.aspx

那个班让你做这样的好事:

[TestMethod]
public void TestAFewObviousExceptions()
{
// some setup here
   ExceptionAssert.Throws("Category 47 does not exist", () => 
                wallet.Categories.GetChildCategoryIds(47));
   ExceptionAssert.Throws("Id Flim is not valid", () => 
                wallet.Categories.IdFromName("Flim"));
}