2010-11-05 2 views
21

Я один тест, который должен работать более 1 минуты (VS2008, MSTest, тесты запускаются с VisualStudio):MSTest: как увеличить время тестирования

const int TestTimeout = 1; 

    [TestMethod] 
    [Timeout(10*60*1000)] // 10 minutes 
    public void Login_ExpirationFail_Test() 
    { 
     IAuthenticationParameters parameters = new AuthenticationParameters(...); 
     LdapAuthentication auth1 = new LdapAuthentication(); 
     IAuthenticationLoginResult res = auth1.Login(parameters); 

     Assert.IsNotNull(res); 
     Assert.IsFalse(string.IsNullOrEmpty(res.SessionId)); 

     const int AdditionalMilisecodns = 400; 
     System.Threading.Thread.Sleep((TestTimeout * 1000 + AdditionalMilisecodns) * 60); 

     LdapAuthentication auth2 = new LdapAuthentication(); 
     auth2.CheckTicket(res.SessionId); 
    } 

Этот тест закончен в «Run» режим с «Test» Login_ExpirationFail_Test »превысил период ожидания выполнения». сообщение об ошибке, в «Debug» - он работает нормально.

Я видел несколько похожих проблем, связанных с запуском тестов из командной строки.

Как я могу проверить свою работоспособность в режиме «Выполнить»?

Спасибо.

ответ

17

Ответ очень прост: значение атрибута должно быть константой, а не выражением.

Изменить

[Timeout(10*60*1000)] 

в

[Timeout(600000)] 

устранили неполадку.

EDIT: Комментарий к ответу доведено до моего сведения ошибку, которую я сделал изначально в ответ (написал «60000» как значение тайм-аута). В моем исходном коде у меня 6000000, и это значение помогло. ответ был исправлен недавно

+5

Ваша математика ошибочна. Вы отбросили его в 10 раз. Кроме того, выражение против константы выше в точности эквивалентно, потому что компилятор C# превратит его в одно и то же (за исключением математической ошибки). Если это решение сработало, я подозреваю, что это связано с тем, что математическая ошибка привела значение к чему-то в пределах диапазона, который требует mestest. –

+0

Эй, Эндрю, спасибо, что привлек это к нашему вниманию. Это был просто опечатка в ответе. Я использовал правильную математику в своем исходном коде. Я не знаю, почему это помогло, но это так. – Budda

+4

@Budda Как это ответ? Почему, * это должен быть постоянный *, ответ? Постоянное выражение просто так, постоянное, и, как заметил Андрей, это то, что делает компилятор. Единственное, что вам удается сделать, превратив это в константу самостоятельно, - это много нулей, которые могут быть легко искажены, поскольку я думаю, что этот ответ сам может подтвердить, выражение прекрасно и гораздо читаемо. –

0

Не конкретные шаги, но они должны направить вас в правильном направлении:

Добавьте тест файла настроек к решению, если вы уже не один.

Откройте мастер настройки с помощью тестовых настроек и найдите параметр, который контролирует время ожидания теста.

+0

Есть такие настройки в конфигурации тестов, но они связаны со всеми испытаниями ... в то время как я хочу иметь тайм-аут продлен на 1 тест только ... – Budda

+0

почему вы претендуете Timeout к сопзЬ? Я не использовал этот атрибут, но его обязательно следует применить к методу тестирования – eglasius

+0

Извините за опечатку. Определенно, [Timeout] применялся к методу. Здесь была опечатка (недавно исправлена). – Budda

8

В дополнение к указанию количества секунд, Timeout() поддерживает константу, которая позволяет бесконечно ждать.

[Timeout(TestTimeout.Infinite)] 
+0

Это не дает ответа на вопрос.Чтобы критиковать или просить разъяснения у автора, оставьте комментарий ниже их сообщения. - [Из обзора] (/ review/low-quality-posts/11367272) –

+0

Исходный вопрос был проблемой с тайм-аутом тестирования, например, в моем случае мой тест продолжался в течение 3 часов +, поэтому правильный ответ был первым ответом, чтобы установить время, мой ответ сказал, что «может также сделать», что означает, что если разработчик имеет длительный тест и не знает, сколько времени потребуется, TestTimeout.Infinte - лучший вариант. Пожалуйста, уточните, почему это не очень хороший ответ? –

+0

Лучше, если ответы объяснят их собственное обоснование и не полагаются на другие ответы для контекста, но я согласен, что это полезное дополнение. Извинения за процесс рассмотрения иногда немного запутывают без контекста. –

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