Метод поиска возвращает все подходящие статьи и самые последние не соответствующие статьи до указанного числа.
До возвращения свойство 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. Если я поставлю задержку между созданием каталога и выполнением теста, тест пройден.