private void AssertThrows(Func <DefaultMessage, object> func, string message, Exception innerException) { var defaultMessage = DefaultMessage.New("Default message."); AssertException(Assert.Throws <TestException>(() => func(defaultMessage))); defaultMessage = null; AssertException(Assert.Throws <TestException>(() => func(defaultMessage))); void AssertException(Exception exception) { if (message is null) { Assert.NotNull(exception.Message); if (defaultMessage != null) { Assert.NotEqual(defaultMessage.ToString(), exception.Message); } } else { Assert.Equal(message, exception.Message); } if (innerException is null) { Assert.Null(exception.InnerException); } else { Assert.Equal(innerException, exception.InnerException); } } }