Автоматическое создание тестов

halva

Новичок
Есть код, который уже работает, хочется зафиксировать его работу в качестве тестов. Писать тесты вручную нудно и есть вероятность тупо допустить ошибку. Короче такой вопрос, есть ли инструмент(расширение или что-то подобное) для автоматического создания тестов на php?

Я вижу инструмент таким, есть код, он выполняется как обычно, но в последствии генерируются тесты для объектов, которые участвовали при исполнении кода в рантайме. Или это все мечты?
 

Adelf

Administrator
Команда форума
В первую очередь тест должен проверить правильный ли ты вообще код написал. И лишь потом проверять не испортился ли он со временем.
 

WMix

герр M:)ller
Партнер клуба
Я вижу инструмент таким, есть код, он выполняется как обычно, но в последствии генерируются тесты для объектов, которые участвовали при исполнении кода в рантайме. Или это все мечты?
те если метод вернул "hello world" он всегда это возвращает?

сам подумай что ты хочешь!

сделай хеш проекта, если хеш изменился, то все плохо
 

halva

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

те если метод вернул "hello world" он всегда это возвращает?

сам подумай что ты хочешь!

сделай хеш проекта, если хеш изменился, то все плохо
Мне нужно тестирование не на уровне, отправил значения в функци, посмотрел что она вернула. А на уровне вот был объект, для него автоматически сгенерились моки для всех его зависимостей, с уже готовыми методами, какие то простые проверки на соответствие интерфейсов и прочее.
 

halva

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

fixxxer

К.О.
Партнер клуба
Сложность написания юнит-тестов - четкий признак плохо продуманной архитектуры.
 

WMix

герр M:)ller
Партнер клуба
ты либо тесты не писал, либо смысла не понимаешь.
как можно с помощью f(2)=4 угадать что будет при f(3)

проверки на соответствие интерфейсов делает компайлер,

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

Вурдалак

Продвинутый новичок
Тесты в более широком смысле — это спецификации. Желание генерировать спецификации абсурдно, потому что они как раз являются первоисточником того, что мы хотим от системы.
 

halva

Новичок
Сложность написания юнит-тестов - четкий признак плохо продуманной архитектуры.
Проблема не в сложности написания, а в нудности, слишком много действий нужно сделать, что бы затестировать простейший компонент, который зависит от других простейших компонентов.
ты либо тесты не писал, либо смысла не понимаешь.
как можно с помощью f(2)=4 угадать что будет при f(3)

проверки на соответствие интерфейсов делает компайлер,


и че готовые методы делают? лог пишут или сообщают о удачном вызове заглушки?
ну в зависимости от указанных типов возвращаю случайные переменные, данных типов. В случае объектов, строят по указанным интерфейсам моки. Мне не важно результаты функций, проверки я и сам могу написать, мне же нужен автоматический сгенерированый каркас, который покрывает большинство примитивных проверок. Что такое компайлер, а именно в php?

Тесты в более широком смысле — это спецификации. Желание генерировать спецификации абсурдно, потому что они как раз являются первоисточником того, что мы хотим от системы.
Возможно и абсурдно, но я не первый и не последний, кто идет по такому пути (не факт что правильному). Есть же пример, сам PHP, на сколько я знаю, спецификации(не тесты) у него появились недавно и то благодаря hhvm. У меня есть система, поведение которой я хочу описать, что в этом неправильного?
 

AnrDaemon

Продвинутый новичок
Ты хочешь описать, или ты хочешь, чтобы кто-то за тебя описал?…
 

Вурдалак

Продвинутый новичок
Возможно и абсурдно, но я не первый и не последний, кто идет по такому пути (не факт что правильному). Есть же пример, сам PHP, на сколько я знаю, спецификации(не тесты) у него появились недавно и то благодаря hhvm. У меня есть система, поведение которой я хочу описать, что в этом неправильного?
Ты как-то узко мыслишь, не нужно воспринимать всё буквально. В PHP в роли «спецификаций» выступали тесты *.phpt в репозитории PHP и доки.

Что бы кто-то за меня описал, на основе того что я описал кодом или в коде (допустим в комментариях).
Тогда тебе нужно было сформулировать вопрос по-другому: «PHPUnit слишком многословный, есть ли другой формат тестов?».

Но учитывая твой недавний эпичный тред, где ты создавал инстанс класса без конструктора без видимой на той причины и называл это DI, то у тебя очень серьёзные проблемы с архитектурой.
 
  • Like
Реакции: AmdY

halva

Новичок
Но учитывая твой недавний эпичный тред, где ты создавал инстанс класса без конструктора без видимой на той причины и называл это DI, то у тебя очень серьёзные проблемы с архитектурой.
у тебя какие-то проблемы? я вообще спрашивал твоё мнение об моих решениях и о качестве архитектуры используемой в них? Причем здесь вообще DI? Причем здесь вообще архитектура? Заявленая тема - автоматическая генерация тестов.

Ты как-то узко мыслишь, не нужно воспринимать всё буквально. В PHP в роли «спецификаций» выступали тесты *.phpt в репозитории PHP и доки.
Пока что единственное адекватное твое высказывание, в моих темах.
 

AmdY

Пью пиво
Команда форума
Вурдалак сделал очень хорошее предложение - попробуйте не только юнит тесты.
Мне не нравятся нит тесты, обкладываю ими только критическую бизнес логику, остальное функциональными. Сейчас много инструментов вроде codeception, behat, selenium.
Для юнит тестов есть https://github.com/sebastianbergmann/phpunit-skeleton-generator
 
Сверху