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);
                }
            }
        }