首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重置犀牛Mocks AssertWasNotCalled

重置犀牛Mocks AssertWasNotCalled
EN

Stack Overflow用户
提问于 2014-10-01 15:47:06
回答 1查看 184关注 0票数 0

我有这样一门课:

代码语言:javascript
复制
public class MyClass
{
    private MyStruct _someProperty;
    public MyStruct SomeProperty
    {
        set
        {
            if(StructureChanged(_someProperty, value))
            {
                _someProperty = value;
                OnSomePropertyChanged();
            }
        }
    }

    private bool StructureChanged(MyStruct oldValue, MyStruct newValue)
    {
        // Check if any property of newValue is different from oldValue
        // This is a check for semantic equality, not referential equality
    }

    internal protected virtual OnSomePropertyChanged()
    {
        // ...
    }
}

像这样的测试:

代码语言:javascript
复制
// Arrange
_myClass = MockRepository.GeneratePartialMock<MyClass>();
_myClass.SomeProperty = new MyStruct();

// Act
_myClass.SomeProperty = new MyStruct(); // This is semantically equal to the current value

// Assert
_myClass.AssertWasNotCalled(m => m.OnSomePropertyChanged());

当然,测试失败了,因为当我第一次设置属性时会调用OnSomePropertyChanged。我想要的是第一次设置属性,以某种方式重置AssertWasNotCalled值,然后再次设置属性,并确保不再调用OnSomePropertyChanged。有办法这样做吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-13 04:28:36

实际上,在这种情况下,这需要调用一次OnSomePropertyChanged()。但至少不止一次。

然后,合适的assert语句可能如下所示:

代码语言:javascript
复制
_myClass.AssertWasCalled(m => m.OnSomePropertyChanged(), opt => opt.Repeat.Once());

PS

应该编写另一个测试,以确保在实际更改OnSomePropertyCnahged()之后触发SomeProperty

在这种情况下,在我们的测试中,保证在第一次更改OnSomePropertyCnahged()时触发SomeProperty

期望值只被调用一次,而不是两次,可以保证事件不会在不被期望的情况下触发。

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

https://stackoverflow.com/questions/26145274

复制
相关文章

相似问题

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