在Moq

时间:2017-08-22 14:57:46

标签: c# .net unit-testing moq

对于使用Moq框架的特定单元测试用例,我有一个Mock对象,其方法是我尝试通过在执行时抛出异常来设置。

var mockMySvc = new Mock<IMySvc>();

mockMySvc
   .Setup(x=>x.SomeMethod())
   .Throws<Exception>();

//Execution of some code

//At the assertions
mockMySvc.VerifyAll();

在运行时,代码抱怨mockMySvc的所有预期都没有被满足,尽管抛出了异常。我遗漏了某些内容,或.VerifyAll()方法无法使用.Throws()功能。

1 个答案:

答案 0 :(得分:1)

我不知道你的设置方式,但我总是这样做:

Assert.Throws<Exception>(() => myclass.SomeMethod());

这样您就不需要验证任何内容了。

根据您的评论,这是您确保在方法中抛出异常的方法,以便您可以检查catch块内的代码。

[Test]
public void Test1()
{
    _filmService.Setup(f => f.FindById(It.IsAny<int>())).Throws<Exception>();
    _filmController.Test();
    _filmService.Verify(f => f.Exists(It.IsAny<Film>()), Times.Once);
}

实际代码:

public ActionResult Test()
{
    try
    {
        _filmService.FindById(-1);
    }
    catch (System.Exception)
    {
        _filmService.Exists(null);
    }
    return View();
}

这只是我在代码中测试的一个例子,它可以正常工作。