NSubstitute是否可以清除或删除以前的.When().Do()配置?
substitute.When(s => s.Method(1)).Do(c => { /* do something */ });
// code
substitute.When(s => s.Method(1)).Clear(); // <-- is this possible?
substitute.When(s => s.Method(1)).Do(c => { /* do something different */ });
// other code发布于 2013-09-17 07:32:16
查看来源的CallActions,似乎没有一种方法可以删除或替换回调。
使用一个示例来证明缺乏替换功能
int state = 0;
var substitute = Substitute.For<IFoo>();
substitute.When(s => s.Bar()).Do(c => state++);
substitute.Bar();
Assert.That(state, Is.EqualTo(1));
substitute.When(s => s.Bar()).Do(c => state--);
substitute.Bar();
// FAIL: Both Do delegates are executed and state == 1
Assert.That(state, Is.EqualTo(0));IFoo在哪里
public interface IFoo
{
void Bar();
}由于缺少对NSubstitute API的更改,解决办法是:
var state = 0;
var substitute = Substitute.For<IFoo>();
Action<CallInfo>[] onBar = {c => state++};
substitute.When(s => s.Bar()).Do(c => onBar[0](c));
substitute.Bar();
Assert.That(state, Is.EqualTo(1));
onBar[0] = c => state--;
substitute.Bar();
Assert.That(state, Is.EqualTo(0));https://stackoverflow.com/questions/18843115
复制相似问题