Pull to refresh

Vim по полной: Тестирование с помощью xUnit

Reading time 3 min
Views 7.3K

Оглавление


  1. Введение (vim_lib)
  2. Менеджер плагинов без фатальных недостатков (vim_lib, vim_plugmanager)
  3. Уровень проекта и файловая система (vim_prj, nerdtree)
  4. Snippets и шаблоны файлов (UltiSnips, vim_template)
  5. Компиляция и выполнение чего угодно (vim-quickrun)
  6. Работа с Git (vim_git)
  7. Деплой (vim_deploy)
  8. Тестирование с помощью xUnit (vim_unittest)
  9. Библиотека, на которой все держится (vim_lib)
  10. Другие полезные плагины

Мне еще не приходилось работать в компаниях, которые тестируют свой код так, как это положено делать для последующего сопровождения и рефакторинга. В России даже крупные IT компании избегают процесс модульного тестирования, не говоря уже об общесистемном, что приводит к тоннам затхлого и окаменевшего кода. Да, я считаю, что тестируемый код, это качественный код, но почему же люди этого избегают? Как я понял, причины две:
  • Незнание методологий и инструментов тестирования
  • Сложность в запуске тест-случаев (test-case)

Первая проблема вне темы этой статьи, а вот вторую, особенно для пользователей редактора Vim, я постараюсь здесь решить.

Все та же универсальность


Если вы читали мою статью о плагине vim_deploy, то структура vim_unittest покажется вам знакомой. Данный плагин это лишь унифицированный интерфейс доступа к различным утилитам, предназначенным для модульного тестирования. Для работы ему необходим конкретный адаптер, который предоставит прикладную логику для взаимодействия с утилитами. На деле это означает следующее:
  • Вы устанавливаете себе vim_unittest и один, или несколько адаптеров для него, таких как vim_unittest_phpunit
  • Вы используете команды vim_unittest или горячие клавиши для тестирования проекта или конкретных модулей, при этом совершенно прозрачно для пользователя будет использована та утилита, которая настроена для текущего проекта

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

Плагины vim_unittest и vim_deploy на столько похожи, что я даже копипастил часть текста из предыдущей статьи, меняя пару слов. Прощу прощения, конечно.

Использование


Рассмотрим пример использования данного плагина с адаптером vim_unittest_phpunit. Как уже было сказано выше, сначала нужно установить vim_unittest и любой адаптер для работы с утилитами тестирования. Так же следует настроить утилиту тестирования, согласно вашим требованиям. В моем случае, это были файлы:
phpunit.xml
<?xml version="1.0" encoding="UTF-8"?>
<phpunit
    bootstrap="Bootstrap.php"
    backupGlobals="false"
    >
    <testsuites>
        <testsuite name="Test Suite">
            <directory>./MyTest</directory>
            <directory>./DbTest</directory>
        </testsuite>
    </testsuites>
</phpunit>


Bootstrap.php
<?php
define('IN_TEST', true);
require_once '../init.php';

if(!defined('CURRENT_LANGUAGE')){
	define('CURRENT_LANGUAGE', 'ru');
}


После нужно добавить в ваш файл .vimrc следующие настройки:
let g:vim_unittest#options = {'testDir': 'адрес каталога с тестами относительно корня проекта', 'adapter': 'phpunit'}

и создать сами тесты в виде отдельных файлов, на пример таких:
ExampleTest.php
<?php
namespace Test;

class ExampleTest extends \PHPUnit_Framework_TestCase{
  public function testFirst(){
    $this->assertTrue(1 == 1);
  }
}


На этом все. Для запуска тестов используются три команды:
  • UnitTestRun — запуск всех тестов проекта
  • UnitTestRunFile — запуск тестов в конкретном файле
  • UnitTestRunCurrentFile — запуск тестов в текущем файле
  • UnitTestRunCurrentTest — запуск теста, на имени которого установлен курсор (на имени метода тестирующего класса)

Конечно их следуют забиндить и запускать одной клавишей.

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


Пока все


Так как большинство утилит модульного тестирования имеют схожий интерфейс, их легко подключить к vim_unittest. Если вы еще не тестируете ваш код, не пожалейте на это времени, вам скажут спасибо те, кто будет поддерживать его после вас (или вместе с вами).
Tags:
Hubs:
+9
Comments 0
Comments Leave a comment

Articles