В зависимости от ваших требований вы можете использовать stl-списки для этих типов операций. Вы можете выполнять итерацию через свой список, пока не найдете элемент, и не удалите элемент. Если вы не можете использовать списки, вам придется переместить все самостоятельно, либо каким-либо алгоритмом stl, либо вручную.
Я, вероятно, рекомендовал бы разработать Ваше приложение, таким образом, переопределения "OnStart" и "OnStop" в службе Windows просто называют методы на блоке библиотеки классов. Тем путем можно автоматизировать модульные тесты против методов библиотеки классов, и дизайн также абстрагирует бизнес-логику от реализации службы Windows.
В этом сценарии, тестируя "OnStart" и сами методы "OnStop" в контексте службы Windows тогда был бы интеграционный тест, не что-то, что Вы автоматизируете.
У меня есть протестированные сервисы окон единицы, не тестируя сервис непосредственно, а скорее тестируя то, что делает сервис.
Обычно я создаю один блок для сервиса и другого для того, что делает сервис. Тогда я пишу модульные тесты против второго блока.
хорошая вещь об этом подходе состоит в том, что Ваш сервис является очень тонким. В основном все, что это делает, назвать методы, чтобы сделать правильную работу в нужное время. Ваш другой блок содержит всю суть работы, которую Ваш сервис намеревается сделать. Это делает очень легким протестировать и легкий к повторному использованию или изменить по мере необходимости.
Я запустил бы здесь . Это показывает, как запустить и остановить сервисы в C#
, образец А для запуска,
public static void StartService(string serviceName, int timeoutMilliseconds)
{
ServiceController service = new ServiceController(serviceName);
try
{
TimeSpan timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds);
service.Start();
service.WaitForStatus(ServiceControllerStatus.Running, timeout);
}
catch
{
// ...
}
}
, я также протестировал сервисы главным образом через консольное приложение, моделировав то, что сделал бы сервис. Тем путем мой модульный тест полностью автоматизирован.
Я использовал бы класс обслуживания окон (тот, который Вы выполняете, когда Вы запускаете/останавливаете сервис), вид подобных прокси к Вашей реальной системе. Я не вижу, как код позади Вашего сервиса должен несколько отличаться от любого другого программирования. onStart и onStop методы являются просто запускаемыми событиями, как нажатие кнопки на GUI.
, Таким образом, Ваш класс обслуживания окон является очень тонким классом, сопоставимым с формой окон. Это называет Вашу бизнес-логику / доменной логикой, которая тогда делает то, что это, как предполагается, делает. Все, что необходимо сделать, удостоверяются метод (методы), который Вы называете в своем onStart, и onStop работают как, они, как предполагается. По крайней мере, это - то, что я сделал бы;-)
Служба тестового окна при автоматическом отключении питания, условия выключения Служба тестового окна при отключении и подключении сети Служба тестового окна опция автозапуск, ручной и т. д.