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


191

Я чув про цей термін багато разів (в контексті програмування), але не зміг знайти жодного пояснення того, що він означав. Якісь гарні статті чи пояснення?

Відповіді:


195

Я думаю, ви маєте на увазі тестові прилади :

Мета тестового пристосування - забезпечити наявність добре відомої та фіксованої обстановки, в якій проводяться випробування, щоб результати були повторювані. Деякі люди називають це контекстом тесту.

Приклади світильників:

  • Завантаження бази даних із певним, відомим набором даних
  • Видалення жорсткого диска та встановлення відомої чистої установки операційної системи
  • Копіювання певного відомого набору файлів
  • Підготовка вхідних даних та налаштування / створення підроблених або макетних об'єктів

(джерело: wikipedia, див. посилання вище)

Ось також кілька практичних прикладів із документації рамки "Тест Google" .


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. Перед цим ініціалізуйте змінні цього методу. Анотація методу за допомогою @ 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");
    }
}

2

У Xamarin.UITest це пояснюється так:

Зазвичай кожен Xamarin.UITest пишеться як метод, який називається тестом. Клас, який містить тест, відомий як тестовий кріплення. Тестовий прилад містить або єдиний тест, або логічне групування тестів і відповідає за будь-яку установку, щоб зробити тестовий запуск і будь-яку очистку, яку необхідно виконати після закінчення тесту. Кожен тест повинен відповідати схемі Arrange-Act-Assert:

  • Упорядкувати - Тест налаштує умови та ініціалізує речі, щоб тест міг діяти.
  • Дія - Тест взаємодіє із програмою, вводить текст, натискання кнопок тощо.
  • 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.