web-dev-qa-db-ja.com

プログラミングのフィクスチャとは何ですか?

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

142
Matjaz Muhic

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

テストフィクスチャの目的は、結果が再現可能になるようにテストが実行される既知の固定環境があることを確認することです。これをテストコンテキストと呼ぶ人もいます。

フィクスチャの例:

- Loading a database with a specific, known set of data
- Erasing a hard disk and installing a known clean operating system installation
- Copying a specific known set of files
- Preparation of input data and set-up/creation of fake or mock objects

(ソース:ウィキペディア、上記のリンクを参照)

こちらもいくつかあります 「Google Test」フレームワークのドキュメントからの実用例

139
m01

PHPユニットテストは、これについて非常に良い説明があると思います。

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

また、Yii文書では、フィクスチャのテストが適切な形で説明されています

自動テストは何度も実行する必要があります。テストプロセスが繰り返し可能であることを確認するために、fixtureと呼ばれる既知の状態でテストを実行したいと思います。たとえば、ブログアプリケーションで投稿作成機能をテストするには、テストを実行するたびに、投稿に関する関連データを保存するテーブル(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の関数があり、テストを実行する前にデータをセットアップし、完了したらそれらを初期状態に復元できます。

9

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

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

テストは、既知のオブジェクトのセットを背景にして実行する必要があります。このオブジェクトのセットは、テストフィクスチャと呼ばれます。テストを書くとき、実際に値をテストするよりも、フィクスチャをセットアップするためのコードを書くのに多くの時間を費やすことに気付くでしょう。

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

共通のフィクスチャを使用している場合、次のようにします。

フィクスチャの各部分にフィールドを追加@ org.junit.Beforeでメソッドに注釈を付け、そのメソッド内の変数を初期化@ org.junit.Afterでメソッドに注釈を付けて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");
    }
}
3
Reizz

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

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

  • 配置-テストは条件を設定し、テストを実行できるように物事を初期化します。
  • Act –テストはアプリケーションと対話し、テキストを入力し、ボタンを押します。
  • アサート–テストは、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.");
        }
    }
}

これがプログラミングのフィクスチャについてのより良い理解を求めている人に役立つことを願っています。

2
Randika Vishman