Некоторые из этих тестов создают экземпляр формы и выполняют тесты различной логики. Конструктор вызывает InitializeComponent, который выделяет элементы управления, к которым необходим доступ некоторым тестам.
Моя проблема заключается в том, что при запуске агента сборки в действиях github
(локально развернутый Github Enterprise. Все агенты сборки — Windows Server 2019) некоторые тесты выдают «Ошибка создания дескриптора окна» при попытке создать элементы управления. Локально все работает нормально.
Я проверил все очевидные вещи, а также некоторые неочевидные вещи, которые предложил Google.
- Каждый тест использует при создании формы, поэтому я знаю, что все удаляется.
- Я проверил ограничения на дескрипторы пользователя и дескрипторы GDI для каждого процесса, они по умолчанию равны 10 000 на агенте.
- Я добавил проверку в функцию настройки, чтобы каждый модульный тест выводил значение Process.GetCurrentProcess().HandleCount на консоль и, следовательно, отображался в журналах сборки. Со временем происходит небольшое увеличение, но оно достигает максимума около 1250, поэтому на самом деле дескрипторы не заканчиваются.
- Я проверил «кучу рабочего стола», и на моем ноутбуке ситуация такая же, как и в агенте сборки.
- Он без проблем проведет несколько сотен тестов, прежде чем они начнут давать сбой. Как только он начинает давать сбой, они не все терпят неудачу. Некоторые проходят без проблем.
- Я считал, что агент сборки «безголовый» и, возможно, он не может создать форму, потому что нет способа ее отобразить. Но сотни тестов, которые делают одно и то же, работают прекрасно.