Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 重置Rhino Mocks资产未调用_C#_Rhino Mocks - Fatal编程技术网

C# 重置Rhino Mocks资产未调用

C# 重置Rhino Mocks资产未调用,c#,rhino-mocks,C#,Rhino Mocks,我有一门课是这样的: public class MyClass { private MyStruct _someProperty; public MyStruct SomeProperty { set { if(StructureChanged(_someProperty, value)) { _someProperty = value;

我有一门课是这样的:

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()
    {
        // ...
    }
}
// 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());
像这样的测试:

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()
    {
        // ...
    }
}
// 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());
//排列
_myClass=MockRepository.GeneratePartialMock();
_myClass.SomeProperty=new MyStruct();
//表演
_myClass.SomeProperty=new MyStruct();//这在语义上等于当前值
//断言
_myClass.AssertWasNotCalled(m=>m.OnSomePropertyChanged());

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

实际上,在这种情况下,应该只调用一次
OnSomePropertyChanged()
。但不超过一次,也不少于一次

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

_myClass.AssertWasCalled(m => m.OnSomePropertyChanged(), opt => opt.Repeat.Once());
PS

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

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


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

但是,我怎么知道它是在第一次还是第二次设置SomeProperty时被调用的呢?我更新了我的答案,解释了如何保证它