Я пишу небольшую библиотеку Functional C #, в которой я определил тип Unit
`, а также несколько методов расширения для преобразования:
Action
Action<T1>
Func<T1, T2>
- Etc.
Кому:
Func<Unit>
Func<T1, Unit>
Func<T1,T2, Unit>
- 1029 * Etc. *
public static partial class ActionExtensions
{
public static Func<Unit> ToFunc(this Action action) =>
() =>
{
action();
return Unit.Default;
};
public static Func<T, Unit> ToFunc<T>(this Action<T> action) =>
t =>
{
action(t);
return Unit.Default;
};
public static Func<T1, T2, Unit> ToFunc<T1, T2>(this Action<T1, T2> action) =>
(t1, t2) =>
{
action(t1, t2);
return Unit.Default;
};
// other methods...
Unit
определяется следующим образом:
public readonly struct Unit : IEquatable<Unit>
{
public static readonly Unit Default = new Unit();
public override int GetHashCode() =>
0;
public override bool Equals(object obj) =>
obj is Unit;
public bool Equals(Unit other) =>
true;
public static bool operator ==(Unit left, Unit right) =>
true;
public static bool operator !=(Unit left, Unit right) =>
false;
}
Мне интересно, как выполнить модульное тестирование этих методов расширения.
Должен ли я выполнить какое-либо отражение для анализа типа возвращаемого значения, а также параметров Func
, должен ли я проверять, что при вызове Func
это вызывает базовый метод Action
?
Есть мысли?