Хорошо. Наконец-то я решил эту проблему. Я не скажу «решено», так как все еще не понимаю, что происходит. В любом случае ...
Я загрузил последние версии Ant (1.7.1) и JUnit (4.6) и разместил их во внешнем каталоге - НЕ в рабочем пространстве или «внутри» Eclipse.
Затем я пошел в Windows / Preferences / Ant / Runtime / Classpath / Ant Home Entries и уничтожьте все существующие (по умолчанию) значения. Я заменил их содержимым недавно загруженного каталога Ant lib.
Затем я добавил загруженный junit.jar в Global Entries. Он содержит классы org.hamcrest, как и junit.jar, включенный в Eclipse, поэтому я не знаю, зачем это нужно, но это так.
Вот и все. Моя задача junit в файле сборки работает отлично.
Я не думаю, что нужно добавлять jar-файл JUnit в путь к классам Ant. Вместо этого убедитесь, что у вас есть библиотека JUnit в вашем пути сборки Java (Windows / Preferences / Java / Build Path / Classpath Variables).
JUnit 4.5 включает Hamcrest как часть своей системы согласования. Убедитесь, что у вас есть этот файл JAR в пути к классам
добавьте также hamcrest.jar в свой путь к классам тестирования
Я не рекомендую это как хороший подход, но вы можете обойти эту проблему, зафиксировав текущий элемент в событии OnItemDataBound, сохранив его в общедоступном свойстве или поле, а затем используя его в ваша условная логика.
Например:
<asp:ListView ID="MusicList" OnItemDataBound="Item_DataBound" runat="server">
<ItemTemplate>
<tr>
<%
if (CurrentItem.DownloadLink != null)
{
%>
<td>
<a href="<%#Eval("DownloadLink") %>">Link</a>
</td>
<%
} %>
</tr>
</ItemTemplate>
</asp:ListView>
А на стороне сервера добавьте следующий код в свой код за файлом:
public MusicItem CurrentItem { get; private set;}
protected void Item_DataBound(object sender, RepeaterItemEventArgs e)
{
CurrentItem = (MusicItem) e.Item.DataItem;
}
Обратите внимание, что этот трюк не будет работать в элементе управления UpdatePanel
.
Проверьте, есть ли в вашем пути к классам более старая версия jUnit. Попробуйте запустить ant-скрипт в командной оболочке, чтобы увидеть, появляется ли у вас такая же ошибка. Если вы это сделаете, то, вероятно, ant использует версию jUnit старше 4.4
Обновление:
Посмотрите на папку ANT_HOME. Щелкните правой кнопкой мыши файл build.xml, выберите вторую «сборку Ant» в диалоговом окне «Запуск от имени». Откроется диалоговое окно для редактирования конфигурации запуска муравья (может быть более простой способ открыть это). Перейдите на вкладку Classpath. Добавьте новейший junit в путь к классам (папка lib для ant).
в диалоговом окне "Запуск от имени ...". Откроется диалоговое окно для редактирования конфигурации запуска муравья (может быть более простой способ открыть это). Перейдите на вкладку Classpath. Добавьте новейший junit в путь к классам (папка lib для ant). в диалоговом окне "Запуск от имени ...". Откроется диалоговое окно для редактирования конфигурации запуска муравья (может быть более простой способ открыть это). Перейдите на вкладку Classpath. Добавьте новейший junit в путь к классам (папка lib для ant).У меня была та же проблема, и я пробовал много способов изменить путь к классам. Самым простым решением для меня было использование параметра fork = "no" в целевом объекте junit. Похоже, Eclipse может «автоматически» делать это лучше, чем я ...
Я загрузил JUnit 4.7 и поместил junit-4.7.jar в свой путь сборки (вместо более старой версии). Это решило ее. Я не трогал муравья.
Я поискал в каталоге установки Eclipse с верхнего уровня " hamcrest .jar" (подстановочный знак '*' вокруг hamcrest не отображается в этом веб-сообщении). Затем я добавил найденный jar-файл в путь к классам в Ant build.xml. Исправлена.
У меня возникла проблема при попытке запустить тесты junit из Run -> Run Как -> JUnit Test (я проверил, и у меня действительно установлен последний плагин junit (junit4_4.5.0)).
Я создал новый каталог (externalJars) в основном каталоге установки eclipse, загрузил туда самый последний jar-файл junit (4.8.1).
Затем из Eclipse, выбрав проект, я изменил файлы jar в пути сборки (Проект -> Свойства -> Путь сборки Java). Когда я впервые попробовал junit, я добавил jar-файл junit из папки plugin / org.junit4_4.5.0.v20090824. Я удалил этот файл jar и добавил externalJars / junit-4.8.1.jar (тот, который я только что загрузил) в путь сборки, нажав кнопку «Добавить внешние файлы Jar».
hamcrest.org - это библиотека "сопоставителей". Информацию можно найти по адресу:
http://code.google.com/p/hamcrest/
Предоставляет библиотеку объектов сопоставления (также известных как ограничения или предикаты), позволяющих декларативно определять правила сопоставления, для использования в других фреймворках. Типичные сценарии включают среды тестирования, фиктивные библиотеки и правила проверки пользовательского интерфейса.
Hamcrest был перенесен на Java, C ++, Objective-C, Python и PhP.
Примечание: Hamcrest - это не библиотека для тестирования: просто так получилось, что сопоставители очень полезны для тестирования.
Я обнаружил причину идентичной проблемы, но только при запуске теста с Ant в командной строке.
Возможно, вы захотите запустить Ant в режиме отладки ( ant -d
) и обратите внимание на этот оператор:
[junit] Implicitly adding /usr/share/ant/lib/junit4.jar:...
В моем случае этот JAR был добавлен в конец пути к классам при запуске проверить и переопределить мою ссылку JUnit в моем сценарии Ant.
Оказалось, что моя установка Ant была связана с набором старых библиотек JUnit. Мне пришлось удалить указанный выше junit4.jar, чтобы моя ссылка на путь к классам Ant вступила в силу.