几天前我开始使用犀牛-摩克和单位测试,所以我在这方面是新的。
我创建了一个像这样的一次性类:
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.
你能帮我找到缺失的一步吗?
发布于 2015-01-05 14:05:48
你到底想在这里测试什么?
编译器在使用using语句时是否生成正确的代码?似乎毫无意义。
还是您的类实现了IDisposable?你可以用一个更简单的测试来做。
或者你的处理程序正确地处理了资源?这个测试不检查那个。您可以完全清空Dispose(bool)方法,并且您想要编写的测试仍然会通过。
最好在释放对象之后检查ObjB是否为null,并且在dispose方法中应该做的任何其他事情都已经完成。您要检查的是,当您释放对象时,行为是您所期望的。
https://stackoverflow.com/questions/27779910
复制相似问题