TGViewer
StepOne | Степан Минин StepOne | Степан Минин @steponeit · 3.27K subscribers
Post #537 3.31K
Вы не знали этот NuGet пакет!

Речь конечно же про 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
www.nuget.org Fare 2.2.1 .NET port of dk.brics.automaton - Project Fare is an effort to bring a DFA/NFA (finite-state automata) implementation from Java to .NET. There are quite a few implementations available in other languages today. This project aims to fill the gap in .NET.
  • 👍 14
  • ❤ 4
  • 🔥 4
  • ❤‍🔥 1
More from @steponeit
  1. Sep 25, 2026Рассказал как я добавил в HydraScript объекты и методы без классов и сделал протоколы. Стр…
  2. Sep 22, 2026Post #858
  3. Sep 21, 2026Post #857
  4. Sep 15, 2026Напомню, что у меня есть WireMock.Grpc.Protobuf — расширение для тех, кто пишет компонентн…
  5. Sep 12, 2026StepOne — официальный контрибутор FusionCache 🤙 Между набросами можно ещё и код писать Fu…
  6. Sep 11, 2026Стояк работодателей 2026 🤫 Оказывается, год назад я предсказал выход Астры! И вместе с эт…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →