Модульное тестирование проходит при отладке, но не выполняется при запуске - PullRequest
4 голосов
/ 19 июня 2011

Метод поиска возвращает все подходящие статьи и самые последние не соответствующие статьи до указанного числа.

До возвращения свойство IsMatch соответствующих статей устанавливается в значение true следующим образом:

Articles = MatchArticles.Select (c => {c.IsMatch = true; return c;}). ToList ();

В тесте этого метода,

    [Test]
    public void SearchForArticle1Returns1MatchingArticleFirstInTheList()
    {
        using (var session = _sessionFactory.OpenSession())
        {
            var maxResults = 10;
            var searchPhrase = "Article1";
            IArticleRepository articleRepository = new ArticleRepository(session);
            var articles = articleRepository.GetSearchResultSet(searchPhrase, maxResults);
            Assert.AreEqual(10, articles.Count);
            Assert.AreEqual(1, articles.Where(a => a.Title.Contains(searchPhrase)).Count());
            var article = articles[0];
            Assert.IsTrue(article.Title.Contains(searchPhrase));
            Assert.IsTrue(article.IsMatch);
        }
    }

Все утверждения проходят, когда тест выполняется в режиме отладки, однако окончательное утверждение не выполняется, когда тест запускается в выпуске:

Ожидаемый: True Но было: Ложь

В самом приложении ответ правильный.

Есть идеи, почему это происходит?

Edit:

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

1 Ответ

7 голосов
/ 19 июня 2011

Pones, с тех пор вы пояснили, что модульный тест не проходит, если не выполняется отладка.

На этом этапе это может быть что угодно, однако вам следует продолжить выполнение модульного теста без отладки и вставить следующее утверждение, где вы знаете (или думаете, что знаете), что это правда

 if(condition)
            Debugger.Launch();

Это сделает очевидным и позволит вам сосредоточиться на том, что идет не так. 1 Место, которое я предлагаю, находится на IsMatch собственности (для начинающих)

Другое распространенное место, где вы можете столкнуться с такими проблемами, - это использование DateTime. Если ваш модульный тест выполняется «слишком быстро», он может нарушить ваши предположения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...