首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仿犀牛ExpectationViolationException

仿犀牛ExpectationViolationException
EN

Stack Overflow用户
提问于 2015-01-05 12:50:25
回答 1查看 242关注 0票数 0

几天前我开始使用犀牛-摩克和单位测试,所以我在这方面是新的。

我创建了一个像这样的一次性类:

代码语言:javascript
复制
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;
    }
}

以及应该检查处理是否正确的单元测试:

代码语言:javascript
复制
[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.

你能帮我找到缺失的一步吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-05 14:05:48

你到底想在这里测试什么?

编译器在使用using语句时是否生成正确的代码?似乎毫无意义。

还是您的类实现了IDisposable?你可以用一个更简单的测试来做。

或者你的处理程序正确地处理了资源?这个测试不检查那个。您可以完全清空Dispose(bool)方法,并且您想要编写的测试仍然会通过。

最好在释放对象之后检查ObjB是否为null,并且在dispose方法中应该做的任何其他事情都已经完成。您要检查的是,当您释放对象时,行为是您所期望的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27779910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档