Programlamadaki fikstürler nelerdir?


192

Bu terimi birçok kez duydum (programlama bağlamında) ama bunun ne anlama geldiğine dair bir açıklama bulamadım. İyi makaleler veya açıklamalar var mı?

Yanıtlar:


195

Test fikstürlerine atıfta bulunduğunuzu düşünüyorum :

Bir test fikstürünün amacı, testlerin yapıldığı iyi bilinen ve sabit bir ortam olmasını sağlamaktır, böylece sonuçlar tekrarlanabilir. Bazı insanlar buna test bağlamı diyor.

Demirbaş örnekleri:

  • Bilinen belirli bir veri kümesiyle veritabanı yükleme
  • Sabit diski silme ve bilinen temiz bir işletim sistemi yüklemesi yükleme
  • Bilinen belirli bir dosya grubunu kopyalama
  • Giriş verilerinin hazırlanması ve sahte veya sahte nesnelerin kurulması / oluşturulması

(kaynak: wikipedia, yukarıdaki bağlantıya bakın)

Ayrıca , "Google Test" çerçevesinin dokümantasyonundan bazı pratik örnekler .


13

Ben PHP-birim testleri bunu açıklamak çok iyi olduğunu düşünüyorum:

Yazma testlerinin en çok zaman alan bölümlerinden biri, dünyayı bilinen bir duruma ayarlamak ve daha sonra test tamamlandığında orijinal durumuna döndürmek için kod yazmaktır. Bilinen bu duruma testin fikstürü denir.

Ayrıca Yii belgeleri açıklanan fikstür iyi bir şekilde test:

Otomatik testlerin birçok kez yapılması gerekir. Test sürecinin tekrarlanabilir olmasını sağlamak için, testleri fikstür adı verilen bilinen bir durumda çalıştırmak istiyoruz. Örneğin, bir blog uygulamasında yazı oluşturma özelliğini test etmek için, testleri her çalıştırdığımızda, yazılarla ilgili verileri depolayan tablolar (örneğin Yazı tablosu, Yorum tablosu) bazı sabit durumlara geri yüklenmelidir.

İşte fikstür testinin basit örneği

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

Bu PHP birim testi, isimleri olan işlevlere sahiptir setUpve tearDowntestinizi çalıştırmadan önce verilerinizi ayarlarsınız ve bitirdiğinizde ilk duruma geri yükleyebilirsiniz.


7

Fikstür terimi bağlama, programlama diline veya çerçeveye göre değişir.

1. Testin yapıldığı bilinen bir durum

Yazma testlerinin en çok zaman alan bölümlerinden biri, dünyayı bilinen bir duruma ayarlamak ve daha sonra test tamamlandığında orijinal durumuna döndürmek için kod yazmaktır. Bilinen bu duruma testin fikstürü denir. PHP-Unit belgeleri

Test fikstürü (test bağlamı olarak da bilinir), bir testi çalıştırmak için gereken ön koşullar veya durum kümesidir. Geliştirici, testlerden önce bilinen iyi bir durum ayarlamalı ve testlerden sonra orijinal durumuna geri dönmelidir. Wikipedia (xUnit)

2. Örnek veriler içeren bir dosya

Fikstür, örnek veriler için süslü bir kelimedir. Fikstürler, testler çalıştırılmadan önce test veritabanınızı önceden tanımlanmış verilerle doldurmanıza olanak tanır. Fikstür veritabanından bağımsızdır ve YAML dilinde yazılmıştır. Her model için bir dosya vardır. RubyOnRails.org

3. Gerekli bir durumu ayarlayan bir işlem. 

Bir yazılım test fikstürü, sistemi başlatmak için gerekli tüm kodu sağlayarak test süreci için kurar ve böylece önkoşulları karşılar. Bir örnek, testinizi çalıştırmadan önce bir müşteri sitesinden bilinen parametreleri içeren bir veritabanı yüklemek olabilir. Vikipedi


5

Tam olarak bu konuda, JUnit'in iyi açıklanmış bir dokümanı vardır. İşte bağlantı!

Makalenin ilgili kısmı:

Testlerin bilinen bir nesne kümesinin arka planında yapılması gerekir. Bu nesne kümesine test fikstürü denir. Testler yazarken, fikstürü ayarlamak için kodu yazmak için genellikle değerleri test etmekten daha fazla zaman harcadığınızı göreceksiniz.

Bir dereceye kadar, yazdığınız inşaatçılara dikkat ederek fikstür kodunun yazılmasını kolaylaştırabilirsiniz. Ancak, fikstür kodunun paylaşılmasından çok daha fazla tasarruf sağlanır. Genellikle, aynı armatürü birkaç farklı test için kullanabilirsiniz. Her vaka, fikstüre biraz farklı mesajlar veya parametreler gönderecek ve farklı sonuçları kontrol edecektir.

Ortak bir fikstürünüz olduğunda, işte yapmanız gerekenler:

Fikstürün her bir kısmı için bir alan ekleyin @ org.junit ile bir yönteme açıklama ekleyin. Bu yöntemdeki değişkenlere başlamadan önce başlatın ve @ org.junit ile bir yönteme açıklama ekleyin. 12 İsviçre Frangı, 14 İsviçre Frangı ve 28 ABD Doları'nın farklı kombinasyonlarıyla çalışmak isteyen birkaç test vakası, önce bir fikstür oluşturur:

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

2

Xamarin.UITest'te şöyle açıklanmaktadır:

Genellikle, her Xamarin.UITest test olarak adlandırılan bir yöntem olarak yazılır. Testi içeren sınıfa bir test fikstürü denir. Test fikstürü tek bir test veya mantıksal bir test grubu içerir ve test çalıştırmasını yapmak için herhangi bir kurulumdan ve test bittiğinde yapılması gereken herhangi bir temizlikten sorumludur. Her test Arrange-Act-Assert modelini izlemelidir:

  • Düzenle - Test koşulları test eder ve testin gerçekleştirilebilmesi için işleri başlatır.
  • Act - Test uygulama ile etkileşime girecek, metin girecek, düğmelere basacak vb.
  • Assert - Test, doğruluğu belirlemek için Yasa adımında gerçekleştirilen eylemlerin sonuçlarını inceler. Örneğin, uygulama belirli bir hata mesajının görüntülendiğini doğrulayabilir.

Yukarıdaki Alıntı'nın orijinal makalesi için link

Ve Xamarin.UITest kodu içinde aşağıdaki gibi görünüyor:

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

Bu Programlama Fikstür hakkında daha iyi anlamak isteyen biri için yararlı olabilir umuyoruz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.