Я пытаюсь создать свой собственный файл «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'";
}
}