我想知道是否有一种方法/解决方法可以从 JustMock 中的 Arrange 调用中捕获输出。
例如,这是我想做的事情:
Mock.Arrange(() => foo.Bar()).CallOriginal(result => { /* stuff I want to do with the result */ });
我实际上已经做了类似的事情来捕获参数,但正如我所说,我无法弄清楚如何捕获返回值。以下是如何捕获参数:
string myVar;
void Setup() {
Mock.Arrange(() => foo.Bar(Arg.Matches<string>(val => Capture(val))).CallOriginal();
}
private boolean Capture(string val) {
myVar = val;
// any other stuff
return true;
}
编辑:找到了一个(荒谬的)解决方案。留下这个问题以防其他人需要它,或者如果其他人找到更好的方法。
bool callOriginal = false;
string myVar;
string myRes;
void Setup() {
Mock.Arrange(() => foo.Bar(Arg.Matches<string>(val => Capture(val))).Returns(() => CallOriginalMethod());
Mock.Arrange(() => foo.Bar(Arg.Matches<string> val => CallOriginal()
}
private boolean Capture(string val) {
if (callOriginal) return false;
myVar = val;
// any other stuff
return true;
}
private boolean CallOriginal() {
return callOriginal;
}
private string CallOriginalMethod() {
callOriginal = true;
var res = foo.Bar(myVar); //here we get the return value
myRes = res;
callOriginal = false;
return res;
}
这不适用于多线程应用程序,但它适用于我需要的东西。