wake-up-neo.com

Was sind Fixtures in der Programmierung?

Ich habe diesen Begriff schon oft gehört (wenn es um Programmierung geht), konnte aber keine Erklärung finden, was das bedeutet. Irgendwelche guten Artikel oder Erklärungen? Ich habe nichts Erwähnenswertes gefunden.

142
Matjaz Muhic

Ich denke, Sie beziehen sich auf Test Fixtures :

Der Zweck einer Testvorrichtung besteht darin, sicherzustellen, dass es eine bekannte und feste Umgebung gibt, in der Tests ausgeführt werden, damit die Ergebnisse reproduzierbar sind. Einige Leute nennen dies den Testkontext.

Beispiele für Vorrichtungen:

- 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

(Quelle: Wikipedia, siehe Link oben)

Hier sind auch einige praktische Beispiele aus der Dokumentation des 'Google Test'-Frameworks .

139
m01

Ich denke, PHP-Unit-Tests haben dies sehr gut erklärt:

Einer der zeitaufwändigsten Teile beim Schreiben von Tests ist das Schreiben des Codes, um die Welt in einen bekannten Zustand zu versetzen und sie nach Abschluss des Tests wieder in den ursprünglichen Zustand zu versetzen. Dieser bekannte Zustand wird als Prüfvorrichtung bezeichnet.

Auch Yii dokumentiert beschriebenen Fixtures Test in einem guten Zustand:

Automatisierte Tests müssen mehrmals ausgeführt werden. Um sicherzustellen, dass der Testprozess wiederholbar ist, möchten wir die Tests in einem bekannten Zustand ausführen, der als Fixture bezeichnet wird. Um beispielsweise die Funktion zum Erstellen von Beiträgen in einer Blog-Anwendung zu testen, sollten die Tabellen, in denen relevante Daten zu Beiträgen gespeichert sind (z. B. die Beitragstabelle, die Kommentartabelle), jedes Mal, wenn wir die Tests ausführen, in einem festgelegten Zustand wiederhergestellt werden.

Hier das einfache Beispiel zum Fixtures Test

<?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));
    }
}
?>

Dieser PHP Komponententest hat Funktionen mit den Namen setUp und tearDown, mit denen Sie Ihre Daten vor dem Ausführen des Tests einrichten und am Ende wieder in den Ausgangszustand zurückversetzen können .

9

Genau zu diesem Thema hat JUnit ein gut erklärtes Dokument. hier ist der Link!

Der verwandte Teil des Artikels ist:

Tests müssen vor dem Hintergrund bekannter Objekte ausgeführt werden. Diese Gruppe von Objekten wird als Testvorrichtung bezeichnet. Wenn Sie Tests schreiben, werden Sie häufig feststellen, dass Sie mehr Zeit damit verbringen, den Code zum Einrichten des Geräts zu schreiben, als mit dem eigentlichen Testen von Werten.

In gewissem Maße können Sie das Schreiben des Fixture-Codes vereinfachen, indem Sie den Konstruktoren, die Sie schreiben, besondere Aufmerksamkeit schenken. Eine viel größere Ersparnis ergibt sich jedoch durch das Teilen des Gerätecodes. Häufig können Sie dasselbe Gerät für mehrere verschiedene Tests verwenden. Jeder Fall sendet leicht unterschiedliche Meldungen oder Parameter an das Gerät und prüft, ob unterschiedliche Ergebnisse vorliegen.

Wenn Sie ein gemeinsames Gerät haben, tun Sie Folgendes:

Fügen Sie ein Feld für jeden Teil des Fixtures hinzu. Kommentieren Sie eine Methode mit @ org.junit.Before und initialisieren Sie die Variablen in dieser Methode. Kommentieren Sie eine Methode mit @ org.junit.Nachdem Sie alle permanenten Ressourcen freigegeben haben, die Sie in setUp zugewiesen haben. Zum Beispiel zum Schreiben Mehrere Testfälle, die mit verschiedenen Kombinationen von 12 Schweizer Franken, 14 Schweizer Franken und 28 US-Dollar arbeiten möchten, erstellen zunächst ein Fixture:

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

In Xamarin.UITest wird Folgendes erklärt:

In der Regel wird jeder Xamarin.UITest als eine Methode geschrieben, die als Test bezeichnet wird. Die Klasse, die den Test enthält, wird als Testvorrichtung bezeichnet. Das Test-Fixture enthält entweder einen einzelnen Test oder eine logische Gruppierung von Tests und ist für alle Setups verantwortlich, mit denen der Testlauf durchgeführt wird, sowie für alle Aufräumarbeiten, die nach Abschluss des Tests durchgeführt werden müssen. Jeder Test sollte dem Arrange-Act-Assert-Muster folgen:

  • Anordnen - Der Test richtet die Bedingungen ein und initialisiert die Dinge, damit der Test durchgeführt werden kann.
  • Act - Der Test interagiert mit der Anwendung, gibt Text ein, drückt Knöpfe und so weiter.
  • Bestätigen - Der Test überprüft die Ergebnisse der im Schritt "Act" durchgeführten Aktionen, um die Richtigkeit zu bestimmen. Beispielsweise kann die Anwendung überprüfen, dass eine bestimmte Fehlermeldung angezeigt wird.

Link zum Originalartikel des obigen Auszugs

Und in Xamarin.UITest sieht es so aus:

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.");
        }
    }
}

Ich hoffe, dies ist hilfreich für jemanden, der ein besseres Verständnis für Fixtures in Programming haben möchte.

2
Randika Vishman