Существует ли среда модульного тестирования C #, которая поддерживает произвольные выражения, а не ограниченный набор специальных методов?

В основном NUnit, xUnit, MbUnit, MsTest и т.п. имеют методы, подобные следующим:

Assert.IsGreater(a,b)
//or, a little more discoverable
Assert.That(a, Is.GreaterThan(b))

Однако есть ограниченный количество таких встроенных операторов сравнения; и они без нужды дублируют операторы языков. Когда мне нужно что-то даже немного сложное, например ...

Assert.That(a.SequenceEquals(b))

Мне часто приходится либо копаться в руководстве, чтобы найти эквивалент выражения в NUnit-speak, либо мне приходится возвращаться к простым логическим утверждениям с менее полезные сообщения об ошибках.

C #, однако, хорошо интегрируется с произвольными выражениями, поэтому должна быть возможность иметь метод со следующей сигнатурой:

void That(Expression> expr);

Такой метод может использоваться как для выполнения теста (т.е. assertion), а также для обеспечения менее непрозрачной диагностики в случае неудачи теста; после всего, выражение может быть преобразовано в псевдокод, чтобы указать, какое выражение не удалось; и с некоторыми усилиями вы могли бы даже разумно оценивать ошибочные выражения, чтобы дать некоторое представление о значении подвыражений.

Например:

Assert.That(()=> a == b);//could inspect expression and print a and b
Assert.That(()=> a < b && b < c);
//could mention the values of "a

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

Существует ли такая вещь?

Редактировать: Попробовав (и полюбив!) Power Assert, я закончил его повторной реализацией, чтобы устранить несколько ограничений. Мой вариант опубликован как ExpressionToCode ; см. мой ответ ниже для получения списка улучшений.

23
задан Community 23 May 2017 в 12:34
поделиться