public void When_a_InvalidEnumArgumentException_is_thrown_with_a_message() { // Arrange. IEnsureArg <MyTestEnum> ensureArg = Substitute.For <IEnsureArg <MyTestEnum> >(); ensureArg.Value.Returns((MyTestEnum)(-1)); ensureArg.ArgumentName.Returns("myEnum"); // Act. Action action = () => ensureArg.ThrowInvalidEnumArgumentException("my custom message for an enum of type {enumType.Name}"); // Assert. action.ShouldThrow <InvalidEnumArgumentException>() .And .Message.Should().Be("my custom message for an enum of type MyTestEnum"); }
public static IEnsureArg <TEnum> IsValidEnumValue <TEnum>( this IEnsureArg <TEnum> ensureArg, string exceptionMessage = null) where TEnum : struct, IComparable, IFormattable // Closest we can get to System.Enum and be CLSCompliant. { ensureArg.ValidateEnsureArgIsNotNull(); Type enumType = ensureArg.Value.GetType(); if (!enumType.IsEnum) { throw new ArgumentException("TEnum must be an enumerated type", "TEnum"); } if (!Enum.IsDefined(enumType, ensureArg.Value)) { ensureArg.ThrowInvalidEnumArgumentException(exceptionMessage); } return(ensureArg); }