Некоторые?? странность:)
Delegate target =
(target0 = target as CallTargetWithContext0) ??
(target1 = target as CallTargetWithContext1) ??
(target2 = target as CallTargetWithContext2) ??
(target3 = target as CallTargetWithContext3) ??
(target4 = target as CallTargetWithContext4) ??
(target5 = target as CallTargetWithContext5) ??
((Delegate)(targetN = target as CallTargetWithContextN));
Интересный отметить последний бросок, который необходим по некоторым причинам. Ошибка или дизайном?
Итак, я просто составляю список утверждений, которые оцениваются как истинные или false, в зависимости от того, пройдены тесты или нет. Так как тестов не сотни, но обычно меньше 10, мне это подходит.
Если бы я делал это более нестандартно, я бы, вероятно, использовал Throw, поскольку это упрощает отладку.
Итак, я Сделал бы:
Expect[ description_, val_, expr_ ] :=
If[
val != expr,
Throw[
StringJoin[ "GOT UNEXPECTED VALUE ", ToString[expr],
" INSTEAD OF ", ToString[val] ]
, "assertion exception"
]
]