2010-11-22 2 views
2

В моем тесте я хочу запустить 2 потока и проверить некоторые условия assert в конце каждого выполнения потока.MSTest: утверждение выполнения нитей

Что лучше всего применять для испытаний в этом случае? Я понимаю, что после запуска обоих потоков мне нужно подождать, пока они закончат ... Есть ли какие-либо готовые решения или мне нужно сделать это «вручную» (например, в конце теста я мог дождаться 2 события, каждый из которых должен быть настроен одним из потоков).

Пожалуйста, сообщите, спасибо!

ответ

1

Вы должны быть осторожны при проведении многопоточных модульных испытаний. Это может сделать их менее надежными. Это больше для интеграционных тестов. Тем не менее, если вы действительно хотите, вы можете позвонить Join на обеих нитей:

Thread t1 = ...; 
Thread t2 = ...; 

t1.Start(); 
t2.Start(); 

// Wait for threads to finish: 
t1.Join(); 
t2.Join(); 
1

Почему бы не использовать Join метод ваших двух потоков?

2

Если вы используете .NET 4 вы можете использовать задачи для выполнения эксплуатационных испытаний на разных потоках. Ниже перечислены:

  • Запустить контрольный код на две разные темы.
  • Ждите выполнения тестов.
  • Условия утверждения после испытания прошли.

Пример:

Action test1 =() => { /* Test code 1 */}; 
    Action test2 =() => { /* Test code 2 */}; 

    Task task2 = null; 
    Task task1 = new Task(() => 
    { 
     task2 = new Task(test2); 
     task2.Start(); 

     test1(); 
    }); 

    task1.Start(); 
    task1.Wait(); 
    task2.Wait(); 

    //Assert test 1 
    //Assert test 2 

Важно утверждать условия после того, как нарезные тесты работать как сбои Утверждающие должно происходить на потоке выполняется тест, а не порождены потоков. Исключения на порождаемые потоки (то есть нетестовые потоки) будут рассматриваться как необработанные исключения, а не «тестовые» исключения.

Смежные вопросы