犀牛模拟 ExpectationViolationException
Rhino-Mocking ExpectationViolationException
几天前我开始使用 Rhino-Mocks 和单元测试,所以我是新手。
我创建了一个这样的一次性 class:
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(真);预期 #0,实际 #1。
你能帮我找到缺失的步骤吗? :-)
你到底想在这里测试什么?
当您使用 using 语句时编译器生成正确的代码?似乎毫无意义。
或者您的 class 实现了 IDisposable?您可以通过更简单的测试来做到这一点。
或者您的处置程序正确处置了资源?这个测试不检查那个。您可以完全清空 Dispose(bool)
方法,您说要编写的测试仍然会通过。
最好在释放对象后检查 ObjB
是否为 null
以及应该在 dispose 方法中完成的任何其他事情。您要检查的是 处理对象时的行为 是否符合您的预期
几天前我开始使用 Rhino-Mocks 和单元测试,所以我是新手。
我创建了一个这样的一次性 class:
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(真);预期 #0,实际 #1。
你能帮我找到缺失的步骤吗? :-)
你到底想在这里测试什么?
当您使用 using 语句时编译器生成正确的代码?似乎毫无意义。
或者您的 class 实现了 IDisposable?您可以通过更简单的测试来做到这一点。
或者您的处置程序正确处置了资源?这个测试不检查那个。您可以完全清空 Dispose(bool)
方法,您说要编写的测试仍然会通过。
最好在释放对象后检查 ObjB
是否为 null
以及应该在 dispose 方法中完成的任何其他事情。您要检查的是 处理对象时的行为 是否符合您的预期