Речь конечно же про Fare, но что эта штука умеет?
Инструмент генерирует строки, под заданное регулярное выражение.
ВНЕЗАПНО, порт джавовской либы, имеет ряд ограничений к регуляркам(
Пример, использования:
using Fare;
var regex = "[a-zA-Z]+";
var xeger = new Xeger(regex);
var text = xeger.Generate();
Очевидно, что применение в тестах - можно генерировать номера телефонов, имейлы, данные по спецификациям.
Есть вариант удобно интегрировать, поскольку пакет включён в
AutoFixture.Чтобы понять подход, советую смотреть доклад про юнит тесты в Шарпизме
Пример из hydrascript.
Создаём класс-обёртку над строкой, поле размечаем атрибутом
[RegularExpression], оттуда будет считываться паттерн.
public record TokenInput(
[property: RegularExpression(TokenInput.Pattern)]
string Value) :
IAdditiveIdentity<TokenInput, TokenInput>,
IAdditionOperators<TokenInput, TokenInput, TokenInput>
{
[StringSyntax(StringSyntaxAttribute.Regex)]
public const string Pattern = "[a-zA-Z]+|[0-9]+|[+]{2}";
public static TokenInput operator +(TokenInput left, TokenInput right) =>
new(left.Value + " " + right.Value);
public static TokenInput AdditiveIdentity { get; } = new(string.Empty);
}
Далее берём автоданные и просим в тест массив от 10 до 25 токенов:
[Theory, AutoData]
public void GetTokens_MockedRegex_ValidOutput(
[MinLength(10), MaxLength(25)] TokenInput[] tokenInputs
Реализацию контрактов
System.Numerics сделал для удобного склеивания через LINQ:
var text = tokenInputs.Aggregate(
TokenInput.AdditiveIdentity,
(x, y) => x + y).Value