Получение QUnit для запуска тестов по порядку

Я использовал qunit для написания серии тестов для кода javascript, который у меня есть. Прямо сейчас по какой-то причине будет запущен первый тест в моем списке, а затем будет запущен ПОСЛЕДНИЙ тест в списке, за которым следуют 2-й до последнего, 3-й до последнего, 4-й до последнего и т. д. Для моих тестов очень важно, чтобы все работает в том порядке, в котором они у меня есть. Я попытался отключить эту опцию, когда qunit сначала запускает тесты, которые не прошли в прошлый раз, но он все еще делает это. Есть ли способ исправить это?


person user1028497    schedule 27.03.2012    source источник


Ответы (2)


Во-первых, выясните, почему ваши тесты ДОЛЖНЫ выполняться в определенном порядке. Весь смысл модульного тестирования заключается в том, что тесты являются атомарными, и должна быть возможность запускать их в любом порядке — если ваш набор тестов не способен на это, вам нужно выяснить, почему, поскольку это может представлять более серьезную проблему.

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

редактировать: эта ссылка найдена по адресу http://www.educatedguesswork.org/2011/06/curse_you_qunit_1.html. По-видимому, добавление этого в ваш набор тестов поможет QUnit.config.reorder = false;

person Steve Hill    schedule 27.03.2012
comment
Нет, я знаю почему. Для повышения эффективности. (Я не хочу вдаваться в подробности, но на данный момент каждый тест выполняется очень долго, и мне нужно сделать все как можно более упорядоченным). Некоторые тесты основаны на результатах предыдущего теста. Я могу сделать все атомарным, но тогда все займет еще больше времени, чем сейчас. Как только я окажусь в положении, когда время не имеет значения, я могу вернуться к атомарной модели, но сейчас я хочу, чтобы мои тесты выполнялись в том порядке, в котором я их записал для эффективности. - person user1028497; 27.03.2012
comment
@user1028497 user1028497 Некоторые тесты основаны на результатах предыдущего теста, тогда у вас нет атомарности - вы должны подготовить то, что необходимо для теста, в самом тесте. - person unludo; 27.03.2012
comment
Я делал это да. Но сейчас мне нужна эффективность, и это был лучший способ сделать что-то. Я не хочу все объяснять, но достаточно сказать, что на данный момент мне нужно запускать тесты в том порядке, в котором они у меня есть. - person user1028497; 27.03.2012
comment
Что касается строки QUnit.config.reorder = false, я уже установил для reorder значение false в своем файле qunit, и это все еще происходит. - person user1028497; 27.03.2012
comment
Я только что перезагрузил файл qunit (было несколько обновлений) и заменил тот, который у меня был, на новый, и он все еще делает это. Я не понимаю, я предполагаю, что он делает это из-за какой-то проблемы с памятью, но когда я делаю такие вещи, разве он не должен забывать? - person user1028497; 28.03.2012
comment
Я на самом деле не уверен, что здесь происходит. Я только что проверил последний код, начиная с 1.5.0pre - опция изменения порядка определенно присутствует в коде и должна делать то, что вы ожидаете. - person Steve Hill; 28.03.2012
comment
Это действительно странно. Одна вещь, которую я заметил, это то, что у меня активно переупорядочивание, сначала выполняется первый тест, затем выполняются неудачные тесты в обратном порядке, а затем идет назад от последнего теста, который не прошел в прошлый раз. Действительно запутанно! - person user1028497; 28.03.2012
comment
Если у вас нет атомарных тестов, вы можете написать только один тест, который вызывает вашу собственную функцию. Эта функция может делать все в том порядке, в котором вы хотите, разделяя состояние и возвращая true или false, если все проходит или нет. Вывод диагнозов на консоль. Группируйте только те вещи, которые должны иметь общее состояние. Это более неуклюже, но честнее — если вы полагаетесь на порядок тестирования, ваш код не должен быть в отдельных тестовых блоках, поскольку они действительно должны быть атомарными. - person Sean; 30.03.2012
comment
Единственный известный мне случай, когда вам нужен упорядоченный тест, — это проект koans. Шусо будет перегружен неудачными тестами и должен увидеть только первый, и они будут решены по порядку. Каждый красный, зеленый, шаг рефакторинга ведет к просветлению. - person Sukima; 06.10.2013

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

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

person Michael Erickson    schedule 01.04.2012