Vb.net 如何测试requestStream是否已关闭和释放
如果发生异常,如何测试requestStream是否关闭并释放Vb.net 如何测试requestStream是否已关闭和释放,vb.net,Vb.net,如果发生异常,如何测试requestStream是否关闭并释放 Try Using requestStream As Stream = rqst.GetRequestStream() requestStream.Write(fle, 0, fle.Length) Throw New ApplicationException("Exception Occured") End Using Catch ex As Exception
Try
Using requestStream As Stream = rqst.GetRequestStream()
requestStream.Write(fle, 0, fle.Length)
Throw New ApplicationException("Exception Occured")
End Using
Catch ex As Exception
MessageBox.Show(ex.Message.ToString())
Finally
'test if the requeststream is closed and disposed?
MessageBox.Show("")
End Try
这就是
使用所做的。即使出现异常,使用
也会导致编译器烘焙一个finally
子句,该子句将调用Dispose
无需再做一次。这就是使用的功能。即使出现异常,使用
也会导致编译器烘焙一个finally
子句,该子句将调用Dispose
无需再次执行。我尝试使用一些模拟和伪实现来解决这个问题,但流基类对此并不友好。
最后,我在单元测试中使用了与spender建议的完全相同的原则(C#used)解决了这个问题:
stream.ReadByte();导致异常
在SystemWrapper的帮助下,可能存在一种更干净的方式,请参见
HTH我尝试使用一些模拟和伪实现来解决这个问题,但流基类对此并不友好。
最后,我在单元测试中使用了与spender建议的完全相同的原则(C#used)解决了这个问题:
stream.ReadByte();导致异常
在SystemWrapper的帮助下,可能存在一种更干净的方式,请参见
HTH谢谢,可以测试吗?我被告知实现idispose,但不确定如何实现?在IDisposable
上没有Disposed
属性,所以可能没有,尽管您可以在结束使用后在requestStream
上尝试一些操作,并确保它们抛出ObjectDisposedException
。是的,Using语句有它自己的范围。谢谢,可以测试吗?我被告知实现idispose,但不确定如何实现?在IDisposable
上没有Disposed
属性,所以可能没有,尽管您可以在结束使用后在requestStream
上尝试一些操作,并确保它们抛出ObjectDisposedException
。是的,Using语句有它自己的范围。
[TestMethod]
[ExpectedException(typeof(ObjectDisposedException))]
public void When_EmailResource_gets_disposed_Should_dispose_ContentStream()
{
var stream = new System.IO.MemoryStream();
var resource = new EmailResource
{
ContentStream = stream,
};
resource.Dispose();
stream.ReadByte();
}