Существует три основных опции:
1), Если выполнение извлечения является главным и это практично, чтобы сделать так, использовать форму хеш-таблицы, созданной однажды (и измененный, когда Список изменяется).
2), Если Список удобно отсортирован или это практично для сортировки его, и O (зарегистрируйте n), извлечение достаточно, вид и поиск.
3), Если O (n) извлечение достаточно быстр или если это невозможно управлять/поддерживать структурой данных или альтернативой, выполните итерации по Списку.
Перед написанием кода, более сложным, чем простое повторение по Списку, стоит продумать некоторые вопросы.
, Почему что-то другое необходимо? (Время) производительность? Элегантность? Пригодность для обслуживания? Повторное использование? Все они являются хорошо причинами, независимо или вместе, но они влияют на решение.
, Сколько контроля Вы имеете над рассматриваемой структурой данных? Можно ли влиять, как это создается? Управляемый позже?
, Каков жизненный цикл структуры данных (и основные объекты)? Это создается внезапно и никогда не изменяется или очень динамичное? Ваш код может контролировать (или даже измениться), его жизненный цикл?
там другие важные ограничения, такие как объем потребляемой памяти? Информация о вопросе дубликатов? И т.д.
Вы можете выполнять тесты групповой системы (MSTest) в NUnit, если используете специальный надстройку NUnit, который распознает атрибуты теста MS (TestClass и т. Д.).
Exact Magic Software имеет "тестовый адаптер" с открытым исходным кодом , который может это сделать.
ОБНОВЛЕНИЕ: Я переработал адаптер Msts NUnit от Exact Magic для NUnit 2.5.2.
MSTests можно запускать без установки Visual Studio. См. how-do-i-use-mstest-without-visual-studio .
Я сделал это, чтобы я мог запускать свои тесты как часть моего процесса CI. (Я использую CC.NET для своего решения CI.)
Я нахожусь в аналогичной ситуации, поскольку я хочу использовать TestDriven.NET для получения статистики покрытия кода. Но у меня проблемы. Моя первая проблема заключается в том, что я использую атрибуты AssemblyInitialize
для инициализации соединения с базой данных. Это не поддерживается NUnit, поэтому около половины моих тестов терпят неудачу, тогда как они нормально работают под MSTest.
Таким образом, похоже, что перевод тестов из одной тестовой среды в другую имеет подводные камни. Если вы знаете об этом, продолжайте, но, возможно, лучше попытаться сохранить согласованность на одной тестовой среде.
Похоже, TeamCity просто использует Gallio для запуска тестов VS. Gallio, похоже, имеет интеграцию с msbuild и звучит идеально, но при более внимательном рассмотрении кажется, что для этого потребуется установка VS, как и MSTest, поскольку он, похоже, зависит от бывших MS:
The plugin enable condition was not satisfied: '${process:DEVENV.EXE} or
${process:VSTESTHOST.EXE} or
${process:QTAGENT.EXE} or
${process:QTAGENT32.EXE} or
${process:QTDCAGENT.EXE} or
${process:QTDCAGENT32.EXE}'.
Host process exited with code: 0
При этом, похоже, что по крайней мере один человек получил он работает:
Мы запускаем тесты VSTS с помощью msbuild TestToolsTask на сервере круиз-контроля. При этом не используется исполняемый файл MSTEST - условие, о котором вы просите, - но используются различные зависимости TFS.
Обратите внимание, что мы переносим тесты из тестовой среды VSTS для NUnit, в основном потому, что мы можем создавать расширения для NUnit для выполнения полезных задач.