关于Moq与MsTest的行为有点混淆.
编辑:这不是"如何测试?"的问题.或者"我如何断言?",这是一个便于查看MoQ如何工作的便笺簿,因此不要关注异常类型等.
我认为一个更好的问题可能是=>"Moq投掷<>的行为是否与MsTest ExpectedExceptionAttribute相似?" 也就是说,他们期望在测试或SUT中出现异常?
我想知道当与MsTest一起使用时,MoQ"投掷"的工作原理.不使用MsTest预期的异常属性会更好吗?在测试中执行try..catch是否更好?我还有一些问题需要解决这个问题.
我正在模拟数据库调用,当发生错误时,我想返回零(0).
TestMethod直接使用MsTest异常属性,并且使用Moq抛出异常.它仅在我在SaveCart方法中抛出异常而不是在返回零时才起作用.
我想了解潜在的行为,因为它感觉好像我不应该,也不想在SaveCart方法中抛出异常.
这是测试中的测试:
[TestMethod]
[ExpectedException(typeof(ApplicationException))]
public void CartRepoSaveCartExceptionShouldReturnZero()
{
_cartDatabaseMock.Setup(c => c.SaveCart(_cart))
.Throws<ApplicationException>();
var result = _cartRepository.SaveCart(_cart);
Assert.AreEqual(result, _cartSaveExceptionValue);
}
Run Code Online (Sandbox Code Playgroud)
这是基本的SaveCart,它不会抛出导致测试失败的异常:
public long SaveCart(Cart cart )
{
long returnValue;
try
{
returnValue = _cartDatabase.SaveCart(cart);
}
catch (Exception)
{
return 0;
}
return returnValue;
}
Run Code Online (Sandbox Code Playgroud)
这是一个基本的SaveCart测试工作,因为它抛出异常:
public long SaveCart(Cart cart )
{
long returnValue;
try
{
returnValue = _cartDatabase.SaveCart(cart);
}
catch (Exception)
{
throw new ApplicationException();
}
return returnValue;
}
Run Code Online (Sandbox Code Playgroud)
如果问题没有明确解释,请随意为问题提出更好的标题.