Самый чистый способ определить дерево выражений? - PullRequest
0 голосов
/ 23 марта 2020

Рассмотрим следующие три строки кода, которые являются частью модульного теста:

var order = new NewOrderSingleTestMessages().ValidMessage;

Expression<Func<ExecutionReport, bool>> expectedReply = r => r.OrderID.Obj != string.Empty && 
                                                             r.ClOrdID.Obj == order.ClOrdID.Obj &&
                                                             r.ExecID.Obj != string.Empty &&
                                                             r.ExecType.Obj == ExecType.NEW &&
                                                             r.OrdStatus.Obj == OrdStatus.NEW;
                                                             // a lot more conditions are required here!

// ...

processorMock.Verify(m => m.Process(It.Is(expectedReply), It.IsAny<SessionID>()), Times.Once);        

Уродливо! Также в будущем будет намного больше условий. Как я могу реорганизовать это более чистым и ясным способом?

1 Ответ

1 голос
/ 23 марта 2020

Ну, я часто пишу возвращенные цепочечные условия, такие как:

return a == b
    && c == d
    && !d
    && foo(e, f)
    ;

или…

return a == b
    || c == d
    || (!d && foo(e,f))
    ;

Я думаю, идея ясна.

Однако, это довольно при возврате чего-либо, а не в операторе if или как вы делаете. На мой взгляд, было бы неправильно создавать функцию, просто возвращающую довольно большую sh, если бы вы никогда не использовали эту функцию снова. Тем не менее, это может быть более читабельным ...

...