7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

HeadwatersAdvent Calendar 2019

Day 11

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

Posted at

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

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

Package Install

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

Image from Gyazo

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 を設定して中身を見てみるとこんな感じで自動的に設定されています。

Image from Gyazo

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.

7
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?