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时被调用的呢?我更新了我的答案,解释了如何保证它