c# – 使用Moq和MSTest测试异常的正确方法
关于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); } 这是基本的SaveCart,它不会抛出导致测试失败的异常: public long SaveCart(Cart cart ) { long returnValue; try { returnValue = _cartDatabase.SaveCart(cart); } catch (Exception) { return 0; } return returnValue; } 这是一个基本的SaveCart测试工作,因为它抛出异常: public long SaveCart(Cart cart ) { long returnValue; try { returnValue = _cartDatabase.SaveCart(cart); } catch (Exception) { throw new ApplicationException(); } return returnValue; } 如果问题没有明确解释,请随意为问题提出更好的标题. 解决方法
你是对的 – 第二个测试“SaveCart”有效,因为它正在抛出一个异常并且第一个测试因为你正在转0而失败.从你对前面答案的回答,我相信你已经知道了这一切.如果你问的是第一次测试失败的行为……它是这样的:
>调用SaveCart 如果你想仔细检查这个…你可以尝试以下测试 >注释掉[ExpectedException(typeof())] 我希望这能回答你的问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |