AutoFixture: C# でテストデータを自動的に作ってくれるライブラリの紹介


テストデータを手作業で全て作成している人はいませんか?そんなあなたにオススメなライブラリのご紹介です。

使用用途は主に Moq の戻りデータを自動生成したいときや、パラメーターを自動生成したいとき、他には Database のデータを自動生成したいときにも使えます。

Package Install

Visual Studio の Package Manager 画面か、 Command を使って Install できます。

Package Manager

Install-Package AutoFixture -Version 4.11.0

.NET CLI

dotnet add package AutoFixture --version 4.11.0

試しに使ってみる

モデルのテストデータを作ってみます。 MyModel を用意しました。

public class MyModel
{
    public int Id { get; set; }
    public string Name { get; set; }
    public DateTimeOffset CreatedAt { get; set; }
    public MyInnerModel MyInner { get; set; }
}

public class MyInnerModel
{
    public string[] Notes { get; set; }
}

AutoFixture を使って MyModel を作ってみます。

[Fact]
public void MyModelTest()
{
    var fixture = new Fixture();
    var myModel = fixture.Create<MyModel>();

    Assert.NotNull(myModel);
}

Breakpoint を設定して中身を見てみるとこんな感じで自動的に設定されています。

AutoFixture で出来ること

  • 自動設定する値をカスタマイズ
  • DataAnnotation を自動読み込み
    • E.g. StringLength(3) が付与されている場合、自動的に 3 文字のデータが設定される。
  • Entity Framework の小テーブルデータを自動作成
    • きちんと外部キーの設定をしている場合のみ。
    • 親テーブルを fixture.Create したあとに Add すれば子テーブルのデータも全部入る。
    • 可能なら DB First (.edmx) より Code First を使ったほうがよいです。

リンク

Document: Cheat Sheet · AutoFixture/AutoFixture Wiki

NuGet Gallery: NuGet Gallery | AutoFixture 4.11.0

GitHub repository: AutoFixture/AutoFixture: AutoFixture is an open source library for .NET designed to minimize the 'Arrange' phase of your unit tests in order to maximize maintainability. Its primary goal is to allow developers to focus on what is being tested rather than how to setup the test scenario, by making it easier to create object graphs containing test data.

似たような機能を持つライブラリ

こっちも使ってみましたが、個人的には AutoFixture のほうが好きでした。

Bogus: bchavez/Bogus: A simple and sane fake data generator for C#, F#, and VB.NET. Based on and ported from the famed faker.js.