Каково состояние TDD и/или BDD в PHP? [закрытый]

Используйте any с нарезкой списка:

def contained_in(lst, sub):
    n = len(sub)
    return any(sub == lst[i:i+n] for i in range(len(lst)-n+1))

Или используйте join для объединения обоих списков в строки и используйте оператор in:

def contained_in(lst, sub):
    return ','.join(map(str, sub)) in ','.join(map(str, lst))

[119 ] Использование :

>>> contained_in([1, 2, 3, 4, 5], [2, 3, 4])
True
>>> contained_in([1, 2, 2, 4, 5], [2, 3, 4])
False
30
задан Michael Berkowski 13 January 2013 в 15:30
поделиться

4 ответа

Существуют по крайней мере два сформировавшиеся, автономные, доступные наборы тестов стиля JUnit, назвали PHPUnit и SimpleTest, соответственно.

, Поскольку далеко Платформы MVC идут, Symfony имеет свою собственную среду тестирования, названную известь , Воспламенитель Кода имеет библиотека unit_test и , CakePHP полагается на вышеупомянутый SimpleTest.

я знаю, что Studio Зенда создал в поддержке тестов PHPUnit, и и PHPUnit и SimpleTest имеют бегунов командной строки, таким образом, интеграция в любой рабочий процесс возможна.

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

протесты являются Вашим паритетом для курса жалобы PHP. Существует два сообщества PHP; PHP как платформа для создания программного обеспечения и PHP как способ взаимодействовать с веб-сервером, веб-браузером и базой данных для создания подобных приложению вещей в сети. Это - меньше черно-белая вещь и больше континуум; Среди тех то, которые больше на поблочном тестировании стороны разработчика программного обеспечения и TDD, поддерживается и используется так же, как это находится на любой другой платформе. Среди "чинят набор материала, я не понимаю, но все еще получаю людей результатов", это неслыханно.

существует много non-framework/custom-framework кода PHP прежней версии вокруг, это трудно получить полезную тестовую обвязку вокруг. PHP также предоставляет себя легко шаблонам, которые полагаются на существование среды браузера для выполнения. У меня нет доказательства для резервного копирования этого кроме моих собственных наблюдений, но много магазинов PHP, которые заботятся о тестировании, заканчивает тем, что полагалось на приемочные испытания (т.е. Селен) вместо фактического Поблочного тестирования, тестирует сначала, и т.д. разработка.

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

  1. Спрашивают их, какую платформу поблочного тестирования они используют

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

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

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

44
ответ дан Alan Storm 27 November 2019 в 23:26
поделиться

В дополнение к библиотекам/платформам, что Alan уже упомянул, можно использовать Apache mod_perl:: Тест, который я, что я использую в качестве ремня безопасности. Это позволяет мне очень, просто интегрируют тесты в мой процесс выпуска. Использование ремня безопасности вывод TAP (Тест Что-либо Протокол), чтобы определить, действительно ли тестовая передача или сбой, пользуясь библиотеками как Тест:: Простой или Тест:: Больше ( Perl и PHP).

Из поля Apache:: Тестовые поддержки, пишущий тесты и в Perl и в PHP. В моих собственных проектах потребовалось немного бит обмана и большое чтение для реального получения его работа, но реализация Тест:: Больше в PHP встроено к ремню безопасности. Запущение всех тестов, записанных и в PHP и в Perl, сделано посредством единственной команды, и любой отказ по пути является полученным Apache:: Тест, отмечая как лучше всего это может, что пошло не так, как надо.

потрясающая часть обо всем этом - то, что можно даже использовать PHPUnit или Простой Тест вместе с предыдущими двумя средами тестирования. Путем запущения тестов в каждой соответствующей библиотеке можно использовать реализацию PHP Теста:: Больше (или даже Perl путем тестирования stdout) и слюна отступает TAP для ремня безопасности для интерпретации.

убедиться читать Apache:: Тест документация и mod_perl ведет к рабочему Apache:: Тест . Кроме того, я нашел статью здесь большая справка.

Как быстрый пример, Вы могли установить тест в Perl в очень немногих строках кода, которые пробегут все страницы на Вашем сайте (которые имеют ссылки), и проверьте весь результат в' 200 OK' ответы и не имейте никаких ошибок анализа:

#!perl

use strict;
use warnings;

use Apache::Test qw(:withtestmore);
use Apache::TestRequest;
use Test::More;
use Test::WWW::Mechanize;
use WWW::CheckSite::Validator;
use WWW::CheckSite::Spider;

plan 'no_plan';

my $config = Apache::Test::config();
my $host = "http://". Apache::TestRequest::hostport($config) || '';

my $s = WWW::CheckSite::Spider->new(
    uri => $host,
    ua_class => 'Test::WWW::Mechanize',
);
my $m = $s->current_agent;

while (my $page = $s->get_page) {
    is($m->status(), "200", $m->uri() ." retrieved successfully.");
    $m->content_lacks("Parse Error", $m->uri() ." does not contain syntax errors.");
}
4
ответ дан Community 27 November 2019 в 23:26
поделиться

В прошлом проекте я использовал PHPUnit, и мне не хватало этого. PHPUnit + Запуск тестов из командной строки, сделал так, что слишком много времени тратилось на кодирование тестов, не было достаточно быстрым и действительно, казалось, ограничивало стиль кода таким образом, который мне не нравился (объекты было легче тестировать, поэтому казалось, что это вроде как предпочитают объекты).

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

В этом последнем проекте, Ведущий программист принял более функциональный подход к программированию, поскольку мы пересматривали программное обеспечение. Когда я упомянул, что хочу писать код через TDD, он за день или меньше разработал собственное решение, которое я считаю таким же эффективным, как PHPUnit. Вдобавок он действительно открыл мне глаза на вопрос об объектно-ориентированном и функциональном программировании.

Первый проект, начался с нуля, на первом этаже, объектно-ориентированное кодирование, большая среда модульного тестирования, он стал монолитным и быстро увяз. Второй проект, хорошо зарекомендовавшее себя программное обеспечение CMS с 5-летней историей и старым кодом, но парадигма функционального программирования и простая среда тестирования (на самом деле мы часто использовали php assert) сделали его проще, а не усложняли.

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

3
ответ дан 27 November 2019 в 23:26
поделиться

Сравнение Майклом Бутом возможностей тестирования BDD на обоих языках:

http://mechanicalrobotfish.com/posts/117-ruby-vs-php-bdd-beauty-contest-no- Конкурс

приходит к выводу, что инструменты и культура PHP BDD на данный момент недостаточно развиты.

Конечно, нет ничего сопоставимого с тем, что доступно программисту на Ruby, ни с точки зрения знаний (книги, видео, статьи, сообщения в блогах), ни инструментов (Rspec, Shoulda, Factory Girl, Mocha, Cucumber).

2
ответ дан 27 November 2019 в 23:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: