对于使用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()
功能。
答案 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();
}
这只是我在代码中测试的一个例子,它可以正常工作。