1

我想知道是否有一种方法/解决方法可以从 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;
}

这不适用于多线程应用程序,但它适用于我需要的东西。

4

0 回答 0