我目前正在使用moq
框架为我的C#应用程序编写一些单元测试。在我的一个测试中,我有以下代码:
private ICryptoProvider GetMockCryptoProvider(bool rsaKey = true)
{
var result = Mock.Of<ICryptoProvider>();
Mock.Get(result)
.Setup(mock => mock.GetRsaKey(rsaKey))
.Returns(new RSACryptoServiceProvider());
return result;
}
当我尝试构建时,我收到以下错误:
在方法'LoginServiceUnitTests.GetMockCryptoProvider(bool)'中,调用 System.IDisposable.Dispose对象'new RSACryptoServiceProvider()'在对它的所有引用超出范围之前。
任何熟悉moq
的人都知道可能导致此问题的原因吗?
答案 0 :(得分:0)
在构建服务器上,您可能启用了MS代码分析,并将警告视为错误。您提供的消息实际上是CA2000&#34;在丢失范围之前处置对象&#34;代码分析规则,在GetMockCryptoProvider
。
它被违反了,因为你没有处置RSACryptoServiceProvider
。在这种情况下,您可能不需要,假设ICryptoProvider
本身实现IDisposable
并且只是包裹RSACryptoServiceProvider
。在这种情况下,您可以暂停此警告,因为如上面的链接所述,&#34;何时压制此警告&#34;:
或者引发警告的方法返回IDisposable对象 包裹你的物体。
要压制它,请装饰你的方法:
[SuppressMessage("Microsoft.Reliability", "CA2000:DisposeObjectsBeforeLosingScope")]
private ICryptoProvider GetMockCryptoProvider(bool rsaKey = true)