几天前我开始使用Rhino-Mocks和Unit-Tests,所以我是新手。
我创建了一个像这样的一次性类:
public class SomeClass : IDisposable
{
private bool _disposed;
public SomeOtherClass ObjB { get; private set; }
public SomeClass(SomeOtherClass b)
{
ObjB = b;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (_disposed)
return;
if (disposing)
{
// set all properties to null
ObjB = null;
// ...
}
_disposed = true;
}
}
以及应检查处理是否正确完成的单元测试:
[TestFixture]
public class SomeClassTests
{
[Test]
public void ShouldDisposeCorrectly()
{
var classB = MockRepository.GenerateStrictMock<SomeOtherClass>()
SomeClass smth;
using (smth = MockRepository.GenerateStrictMock<SomeClass>(classB))
{ }
smth.Expect(p => p.ObjB).Should().BeNull();
}
}
现在,当我开始测试时,它会抛出以下错误: Rhino.Mocks.Exceptions.ExpectationViolationException:SomeClass.Dispose(True);预期#0,实际#1。
你能帮我找到失踪的一步吗? : - )
答案 0 :(得分:1)
你真的想在这里测试什么?
当您使用using语句时,编译器会生成正确的代码吗?似乎相当无趣。
或者你的类实现了IDisposable?你可以通过更简单的测试来做到这一点。
或者您的处理程序是否正确处理了资源?此测试不检查。你可以完全清空Dispose(bool)
方法,你说你想写的测试仍然会通过。
最好在对象被处置后检查ObjB
是null
,以及在dispose方法中应该做的任何其他事情。你想要检查的是你处置对象时的行为是你期望的