Как правильно отформатировать вывод пользовательских ограничений NUnit 3 - PullRequest
0 голосов
/ 06 ноября 2018

Я пытаюсь создать свой собственный файл «assert», в котором сообщение об ошибке дает лучшую информацию, чем

               Test result message:   File not found
               Expected: file exists
               But was:  "C:\folder\myFileName.msi"

Скорее, я хочу написать что-то вроде

               Test result message:   File not found
               Expected: myFileName.msi to exist in C:\folder
               But was:  anotherFile.msi otherFile.msi randomFile.msi

Я могу получить информацию, переопределив Description в ограничении, но последнее сообщение об ошибке не отформатировано.

                Test result message:   Expected: File not found
                Expected: 18a.txt to exist in C:\folder
                But was: C:\folder\abcd.txt C:\folder\ABCDEFGHIJKLMNOPQRSTUVWXYZ - Copy (10).txt C:\folder\ABCDEFGHIJKLMNOPQRSTUVWXYZ - Copy (11).txt C:\folder\ABCDEFGHIJKLMNOPQRSTUVWXYZ - Copy (12).txt C:\folder\ABCDEFGHIJKLMNOPQRSTUVWXYZ - Copy (13).txt C:\folder\ABCDEFGHIJKLMNOPQRSTUVWXYZ - Copy (14).txt C:\folder\ABCDEFGHIJKLMNOPQRSTUVWXYZ.txt C:\folder\AnotherFile.msi C:\folder\efgh.txt C:\folder\FourthFile.msi C:\folder\ijkl.txt 

               But was:  "C:\folder\18a.txt"

По существу, все описание отображается в ожидаемой части сообщения об ошибке. Вот класс ограничений

public class FileVerification : 
NUnit.Framework.Constraints.FileOrDirectoryExistsConstraint
{
    private string Path { get; }
    private string Message { get; }
    public FileVerification(string expected, string message)
    {
        Path = expected;
        Message = message;
    }

    public FileVerification(string expected, string message, params object[] args)
    {

    }

    public override ConstraintResult ApplyTo<TActual>(TActual actual)
    {
        if(!base.ApplyTo(actual).IsSuccess)
        {
            return new ConstraintResult(this, actual, false);
        }
        return new ConstraintResult(this, actual, true);
    }

    public override string Description
    {
        get
        {
            string fileName = Path.Split('\\').Last();
            string extension = fileName.Split('.').Last();
            string directoryPath = Path.Remove(Path.LastIndexOf('\\'));
            IEnumerable<string> files = Directory.EnumerateFiles(directoryPath);//.Where(f => f.EndsWith(extension)).Select(fn => fn.Split('\\').Last());
            return $"{Message}\n\tExpected: {fileName} to exist in {directoryPath}\n\tBut was: {string.Join(" ", files)}\n";
        }
    }

    public override string DisplayName
    {
        get
        {
            return "Just a DisplayName";
        }
    }

    public override string ToString()
    {
        return "Expected 'FILENAME' to exists in 'DIRECTORY'";
    }
}
...