public async Task Verify(string input, VerifySettings?settings = null)
    {
        Guard.AgainstNull(input, nameof(input));
        settings = settings.OrDefault();

        var extension     = settings.ExtensionOrTxt();
        var innerVerifier = new VerifyEngine(
            extension,
            settings,
            testType,
            directory,
            testName);

        var file = GetFileNames(extension, settings.Namer);

        var scrubbedInput = ScrubInput(input, settings);

        FileHelpers.DeleteIfEmpty(file.Verified);
        if (!File.Exists(file.Verified))
        {
            await FileHelpers.WriteText(file.Received, input);

            innerVerifier.AddMissing(file);
            await innerVerifier.ThrowIfRequired();

            return;
        }

        var verifiedText = await FileHelpers.ReadText(file.Verified);

        verifiedText = verifiedText.Replace("\r\n", "\n");
        try
        {
            assert(verifiedText, scrubbedInput);
        }
        catch (Exception exception)
            when(!BuildServerDetector.Detected)
            {
                await FileHelpers.WriteText(file.Received, scrubbedInput);

                innerVerifier.AddNotEquals(file);
                await innerVerifier.ThrowIfRequired(exception.Message);
            }
    }
    async Task VerifyBinary(IEnumerable <Stream> streams, VerifySettings settings)
    {
        var extension     = settings.ExtensionOrBin();
        var innerVerifier = new VerifyEngine(
            extension,
            settings,
            testType,
            directory,
            testName);
        var list = streams.ToList();

        for (var index = 0; index < list.Count; index++)
        {
            var suffix = GetSuffix(list, index);

            var stream       = list[index];
            var file         = GetFileNames(extension, settings.Namer, suffix);
            var verifyResult = await StreamVerifier.VerifyStreams(stream, file);

            switch (verifyResult)
            {
            case VerifyResult.MissingVerified:
                innerVerifier.AddMissing(file);
                break;

            case VerifyResult.NotEqual:
                innerVerifier.AddNotEquals(file);
                break;

            case VerifyResult.Equal:
                innerVerifier.AddEquals(file);
                break;
            }
        }

        await innerVerifier.ThrowIfRequired();
    }