Обеспечение запуска фонового потока при условии достаточного времени для завершения при запуске модульного теста в .Net - PullRequest
1 голос
/ 19 марта 2012

Мой тест NUnit создает экземпляр тестируемого класса. Конструктор этого класса охватывает две фоновые (со старым стилем Thread t = new Thread(myvoidreturner);) задачи, которые не завершают работу, потому что фактический тест, если он завершен ранее, и объект удаляются, я полагаю, очищают выполнение фонового потока.

Есть ли способ, которым я могу настроить свой класс так, чтобы он не утилизировался после запуска тестового материала, чтобы обеспечить выполнение фоновых задач?

Ответы [ 3 ]

1 голос
/ 19 марта 2012

Есть ли способ, которым я могу настроить свой класс таким образом, чтобы он не выбрасывался после Тестовый материал запущен, чтобы убедиться, что фоновые задачи завершены?

У вас могут быть некоторые проблемы с дизайном здесь. Dispose обычно должен быть последним вызовом в вашем модульном тесте (если только вы не тестируете Dispose). В этот момент тест уже должен был сообщить об ошибке или вот-вот пройдет. Позвонив Dispose, вы, разработчик, говорите, что больше нет необходимости использовать этот класс. Если вам больше не нужно использовать этот класс, то почему важно, чтобы фоновые задачи завершались раньше. Вы понимаете, к чему я клоню?

Если в вашем классе есть конкретная операция, зависящая от завершения этих фоновых задач, то метод, используемый для вызова этой операции, должен внутренне ожидать завершения этих задач, прежде чем продолжить. Это приведет к блокировке этого метода, что, в свою очередь, также приведет к блокировке вашего тестового кода. Если тестируемый метод является асинхронным, то ваш класс должен предоставить механизм для ожидания завершения операции.

0 голосов
/ 19 марта 2012

Вы можете предоставить метод TearDown для теста, который задерживает выполнение теста до обработки фоновой работы.

0 голосов
/ 19 марта 2012

Я только что услышал о PNUnit, так что вы можете проверить, есть ли у него что-то, что вы можете использовать, иначе вы можете просто перечислить каждый фоновый поток и выполнить Thread.Join для него.

...