(Конечно, я могу заявить, что это «таинственно», потому что я не смог определить проблему. Я надеюсь, что она станет очевидной для одного из вас, эрудированных читателей, и что вы сможете просветить меня :-)
Выполнение одного теста пригодности в моем браузере (FireFox или IE) работает нормально, но когда я запускаю набор тестов или наборы наборов, Fitnesse просто останавливается где-то очень скоро после начала. Он никогда не сообщает о завершении теста; он просто висит.
Я использую фитнес в Windows XP на базе кода .NET 3.5. Сначала я решил проблему, снабдив диагностическими кодами тесты фитнеса и фитнесс-приборов диагностическим кодом, чтобы попытаться определить, действительно ли это была блокировка фитнеса или (что более вероятно) моя база кода, к которой получили доступ эти приборы. Поэтому я создал несколько диагностических процедур, которые записывают в файл журнала, чтобы сообщить мне, когда я вхожу и покидаю каждый прибор. Если файл журнала в последний раз сообщает «enter», это указывает на то, что он застрял в базе кода; если журнал в последний раз сообщает об «отпуске», это указывает на пригодность. Диагностика довольно проста, требует, чтобы каждый прибор был оборудован вручную - соблюдайте методы Diagnostic.Enter
и Diagnostic.Leave
в приведенном ниже коде скелета. (Аргумент метода Leave
позволяет мне увидеть текст исключения, если оно происходит.)
public class AddFoobarEntityFixture : ColumnFixture
{
public bool Ok()
{
Diagnostic.Enter();
string exitMessage = null;
try
{
. . .
}
catch (Exception exc)
{
exitMessage = exc.Message;
return false;
}
finally
{
Diagnostic.Leave(exitMessage);
}
return true;
}
}
После проведения серии испытаний для одного и того же набора тестов я заметил пару поразительных наблюдений:
Запускается из браузера, вывод fitnesse отстает от прогрессии теста и (в этом сценарии блокировки) никогда не догоняет. То есть в браузере я вижу где-то от одной до, возможно, десятка выполненных тестовых таблиц. Файл журнала, с другой стороны, содержит до 35 тестовых таблиц для одного и того же выполнения. Я подозреваю, что это отставание не связано с блокировкой, потому что веб-страница перестает обновляться задолго до того, как происходит блокировка, когда файл журнала продолжает сообщать о выполнении тестовых таблиц.
Блокировка происходит в случайных местах . Моя грубая гистограмма ниже показывает почти дюжину испытаний (по одному на строку) со временем (или количеством тестовых таблиц) на горизонтальной оси. Каждый «Х» представляет собой одну обработанную тестовую таблицу.
1> XXXXXXXXXXXXXXXXXXXXXXX
2> XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
3> XXXXXXXXXXXXXXXXXXXXXX
4> XXXXXXXXXXXXXXXXXXXXXXX
5> XXXXXXXXXXXXXXXXXXXXXXXX
6> XXXXXXXXXXXXXXXXXXXXXXX
7> XXXXXXXXXXXXXXXXXXXXXXX
8> XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
9> XXXXXXXXXXXXXXXXXXXXXXXX
A> XXXXXXXXXXXXXXXXXXXXXXXX
B> XXXXXXXXXXXXXXXXXXXXXXXX
Без исключения, каждый Ввод был сбалансирован с помощью Leave в журнале. Это говорит о том, что проблема связана с фитнесом, а не с тестируемым кодом. Однако он опирается на два важных предположения: во-первых, что каждое тестовое устройство оснащено инструментами, а во-вторых, что внутри каждого инструментального тестового устройства только тривиальный код находится вне скобок Enter-Leave (например, такие как оператор return, возвращающий только локальное значение или объявление переменной с простым или без инициализированного значения). Я не полностью проверил эти два предположения, но я думаю, что они окажутся в порядке.
Я надеялся, что fitnesse обеспечил свою собственную регистрацию, чтобы я мог видеть, например, какой SetUp или SuiteSetUp был унаследован, когда были обработаны включения, какая тестовая таблица выполнялась и т. Д. Однако из того, что я видел, только возможность регистрации отчетов о пригодности для детализации всей тестовой страницы, что вызывает сожаление.
Любопытно, что мои собственные поиски в сети совершенно не упоминали о других, кто сталкивался с этой проблемой в фитнесе, что, конечно, сильно подчеркивает, что проблема как-то заключается в моей кодовой базе.
Будем благодарны за любые предложения по изоляции этой проблемы, будь то в фитнесе или в моей базе кода!
2010.07.15 Обновление
Как ни странно, я думаю, что исправил проблему. Изменив порт, который использует fitnesse, с (по-моему, по умолчанию) 8080 на менее популярный номер порта, теперь я могу без проблем запускать наборы тестов или наборы наборов. Я проверил, что у меня больше ничего не работает на порте 8080 (с TCPView). Так что у кого-нибудь есть мысли о том, почему это будет иметь значение?