Что такое светильники в программировании?


192

Я слышал об этом термине много раз (в контексте программирования), но не смог найти объяснения, что это значит. Есть хорошие статьи или объяснения?

Ответы:


195

Я думаю, что вы имеете в виду тестовые приборы :

Цель тестового устройства - обеспечить наличие хорошо известной и фиксированной среды, в которой выполняются тесты, чтобы результаты можно было повторять. Некоторые люди называют это тестовым контекстом.

Примеры светильников:

  • Загрузка базы данных с определенным, известным набором данных
  • Стирание жесткого диска и установка известной чистой операционной системы
  • Копирование определенного известного набора файлов
  • Подготовка входных данных и настройка / создание поддельных или фиктивных объектов

(источник: википедия, см. ссылку выше)

Вот также некоторые практические примеры из документации фреймворка «Google Test» .


13

Я думаю, что PHP-модульные тесты очень хорошо объясняют это:

Одна из наиболее трудоемких частей написания тестов - это написание кода, чтобы установить мир в известном состоянии, а затем вернуть его в исходное состояние после завершения теста. Это известное состояние называется приспособлением теста.

Также в Yii документах описаны крепежные испытания в хорошем состоянии:

Автоматизированные тесты должны выполняться много раз. Чтобы убедиться, что процесс тестирования повторяется, мы хотели бы запустить тесты в каком-то известном состоянии, называемом крепежом. Например, чтобы протестировать функцию создания постов в приложении блога, каждый раз, когда мы запускаем тесты, таблицы, хранящие релевантные данные о постах (например, таблица постов, таблица комментариев), должны быть возвращены в некоторое фиксированное состояние.

Вот простой пример теста светильников

<?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перед запуском теста вы настраиваете свои данные и по окончании можете восстановить их в исходное состояние.


7

Термин «крепление» варьируется в зависимости от контекста, языка программирования или структуры.

1. Известное состояние, в отношении которого выполняется тест

Одна из наиболее трудоемких частей написания тестов - это написание кода, чтобы установить мир в известном состоянии, а затем вернуть его в исходное состояние после завершения теста. Это известное состояние называется приспособлением теста. Документация PHP-модуля

Тестовое устройство (также известное как контекст теста) - это набор предварительных условий или состояний, необходимых для запуска теста. Разработчик должен установить известное исправное состояние перед тестами и вернуться к исходному состоянию после тестов. Википедия (xUnit)

2. Файл, содержащий примеры данных

Светильники - это модное слово для примера данных. Приспособления позволяют вам заполнить базу данных тестирования предопределенными данными перед выполнением тестов. Приспособления независимы от базы данных и написаны на YAML. Существует один файл на модель. RubyOnRails.org

3. Процесс, который устанавливает требуемое состояние. 

Приспособление для тестирования программного обеспечения настраивает систему для процесса тестирования, предоставляя ей весь необходимый код для его инициализации, удовлетворяя тем самым любые предварительные условия. Примером может быть загрузка базы данных с известными параметрами с сайта клиента перед запуском теста. Википедия


5

Именно к этой теме у 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");
    }
}

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

Надеюсь, что это может быть полезно для кого-то, кто ищет лучшего понимания о приборах в программировании.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.