279

私はこの用語を(プログラミングの文脈で)何度も聞いたことがありますが、それが何を意味するのかについての説明を見つけることができませんでした。良い記事や説明はありますか?

4

6 に答える 6

278

私はあなたがテストフィクスチャを参照していると思います:

テストフィクスチャの目的は、テストが実行されるよく知られた固定環境が存在することを確認して、結果を再現できるようにすることです。これをテストコンテキストと呼ぶ人もいます。

フィクスチャの例:

  • 特定の既知のデータセットを含むデータベースのロード
  • ハードディスクを消去し、既知のクリーンなオペレーティングシステムをインストールする
  • 特定の既知のファイルセットをコピーする
  • 入力データの準備と偽物または模擬物の設定/作成

(出典:ウィキペディア、上記のリンクを参照)

「GoogleTest」フレームワークのドキュメントからのいくつかの実用的な例もあります。

于 2013-02-04T10:06:07.813 に答える
23

PHPユニットテストはこれを非常によく説明していると思います。

テストを書く上で最も時間のかかる部分の1つは、世界を既知の状態に設定し、テストが完了したときに元の状態に戻すコードを書くことです。この既知の状態は、テストのフィクスチャと呼ばれます。

また、Yiiのドキュメントでは、フィクスチャのテストが適切な形で行われていると説明されています。

自動テストは何度も実行する必要があります。テストプロセスが再現可能であることを確認するために、フィクスチャと呼ばれる既知の状態でテストを実行したいと思います。たとえば、ブログアプリケーションで投稿作成機能をテストするには、テストを実行するたびに、投稿に関連するデータを格納するテーブル(Postテーブル、Commentテーブルなど)を固定状態に復元する必要があります。

ここにフィクスチャテストの簡単な例があります

<?php
use PHPUnit\Framework\TestCase;

class StackTest extends TestCase
{
    protected $stack;

    protected function setUp()
    {
        $this->stack = [];
    }

    protected function tearDown()
    {
        $this->stack = [];
    }

    public function testEmpty()
    {
        $this->assertTrue(empty($this->stack));
    }

    public function testPush()
    {
        array_push($this->stack, 'foo');
        $this->assertEquals('foo', $this->stack[count($this->stack)-1]);
        $this->assertFalse(empty($this->stack));
    }

    public function testPop()
    {
        array_push($this->stack, 'foo');
        $this->assertEquals('foo', array_pop($this->stack));
        $this->assertTrue(empty($this->stack));
    }
}
?>

このPHP単体テストには名前の付いた関数がsetUpありtearDown、テストを実行する前にデータをセットアップし、終了したらそれらを初期状態に復元できます。

于 2017-07-31T05:32:41.783 に答える
18

フィクスチャという用語は、コンテキスト、プログラミング言語、またはフレームワークによって異なります。

1.テストが実行されている既知の状態

テストを書く上で最も時間のかかる部分の1つは、世界を既知の状態に設定し、テストが完了したときに元の状態に戻すコードを書くことです。この既知の状態は、テストのフィクスチャと呼ばれます。 PHP-Unitのドキュメント

テストフィクスチャ(テストコンテキストとも呼ばれます)は、テストを実行するために必要な一連の前提条件または状態です。開発者は、テスト前に既知の良好な状態を設定し、テスト後に元の状態に戻す必要があります。 ウィキペディア(xUnit)

2.サンプルデータを含むファイル

フィクスチャは、サンプルデータのファンシーな言葉です。フィクスチャを使用すると、テストを実行する前に、テストデータベースに事前定義されたデータを入力できます。フィクスチャはデータベースに依存せず、YAMLで記述されています。モデルごとに1つのファイルがあります。 RubyOnRails.org

3.必要な状態を設定するプロセス。 

ソフトウェアテストフィクスチャは、システムを初期化するために必要なすべてのコードをシステムに提供することにより、テストプロセス用にシステムをセットアップします。これにより、存在する可能性のある前提条件が満たされます。例として、テストを実行する前に、顧客サイトから既知のパラメーターを使用してデータベースをロードする場合があります。 ウィキペディア

于 2019-09-28T18:32:27.977 に答える
9

そのトピックにぴったり、JUnitにはよく説明されたドキュメントがあります。ここにリンクがあります!

記事の関連部分は次のとおりです。

テストは、既知のオブジェクトセットのバックグラウンドに対して実行する必要があります。このオブジェクトのセットは、テストフィクスチャと呼ばれます。テストを作成しているときは、実際に値をテストするよりも、フィクスチャを設定するためのコードの作成に多くの時間を費やしていることに気付くことがよくあります。

作成するコンストラクターに注意を払うことで、ある程度、フィクスチャコードの記述を容易にすることができます。ただし、フィクスチャコードを共有することで、大幅な節約が可能になります。多くの場合、いくつかの異なるテストに同じフィクスチャを使用できます。ケースごとにわずかに異なるメッセージまたはパラメーターがフィクスチャーに送信され、異なる結果がチェックされます。

共通のフィクスチャがある場合、次のようにします。

フィクスチャの各部分にフィールドを追加します。@org.junitでメソッドに注釈を付けます。そのメソッドの変数に注釈を付けます。@org.junitでメソッドに注釈を付けます。setUpで割り当てた永続的なリソースを解放した後。 12スイスフラン、14スイスフラン、および28米ドルのさまざまな組み合わせで動作するいくつかのテストケースでは、最初にフィクスチャを作成します。

public class MoneyTest {
    private Money f12CHF;
    private Money f14CHF;
    private Money f28USD;

    @Before public void setUp() {
    f12CHF= new Money(12, "CHF");
    f14CHF= new Money(14, "CHF");
    f28USD= new Money(28, "USD");
    }
}
于 2017-05-24T09:13:55.033 に答える
2

Xamarin.UITestでは、次のように説明されています。

通常、各Xamarin.UITestは、テストと呼ばれるメソッドとして記述されます。テストを含むクラスは、テストフィクスチャと呼ばれます。テストフィクスチャには、単一のテストまたはテストの論理グループのいずれかが含まれ、テストを実行するためのセットアップと、テストの終了時に実行する必要のあるクリーンアップを担当します。各テストは、Arrange-Act-Assertパターンに従う必要があります。

  • アレンジ–テストは条件を設定し、テストを実行できるように初期化します。
  • 動作–テストはアプリケーションと対話し、テキストを入力し、ボタンを押すなどします。
  • アサート–テストは、Actステップで実行されたアクションの結果を調べて、正確性を判断します。たとえば、アプリケーションは特定のエラーメッセージが表示されていることを確認する場合があります。

上記抜粋の元の記事へのリンク

Xamarin.UITestコード内では、次のようになります。

using System;
using System.IO;
using System.Linq;
using NUnit.Framework;
using Xamarin.UITest;
using Xamarin.UITest.Queries;

namespace xamarin_stembureau_poc_tests
{
    [TestFixture(Platform.Android)]
    [TestFixture(Platform.iOS)]
    public class TestLaunchScreen
    {
        IApp app;
        Platform platform;

        public Tests(Platform platform)
        {
            this.platform = platform;
        }

        [SetUp]
        public void BeforeEachTest()
        {
            app = AppInitializer.StartApp(platform);
        }

        [Test]
        public void AppLaunches()
        {
            app.Screenshot("First screen.");
        }

        [Test]
        public void LaunchScreenAnimationWorks()
        {
            app.Screenshot("Launch screen animation works.");
        }
    }
}

これがプログラミングのフィクスチャについてのより良い理解を探している誰かに役立つかもしれないことを願っています。

于 2018-11-08T08:38:38.870 に答える
2

私はこの答えを「備品」とは何かについての簡単なメモとして書いています。

same-data-multiple-tests

テストフィクスチャ:複数のテストに同じデータ構成を使用する類似したデータを操作する2つ以上のテストを作成している場合は、テストフィクスチャを使用できます。これにより、オブジェクトの同じ構成を複数の異なるテストに再利用できます。

あなたはgoogletestでもっと読むことができます

フィクスチャは、統合テスト中または開発中に使用できます(たとえば、開発データベースからデータが送信されるUI開発などです。

データベースまたはテストのための偽のユーザー

myproject / Fixtures / my_fake_user.json

[
  {
    "model": "myapp.person",
    "pk": 1,
    "fields": {
      "first_name": "John",
      "last_name": "Lennon"
    }
  },
  {
    "model": "myapp.person",
    "pk": 2,
    "fields": {
      "first_name": "Paul",
      "last_name": "McCartney"
    }
  }
]

あなたはdjangoドキュメントからもっと読むことができます

于 2020-07-28T04:23:37.963 に答える