[OperationContract]
[WebGet(UriTemplate = "/searchresults/{searchTerm}/{searchType}", ResponseFormat = WebMessageFormat.Xml, RequestFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.Bare)]
Message GetSearchResults(string searchTerm, string searchType);
[OperationContract]
[WebGet(UriTemplate = "/searchresults/{searchTerm}", ResponseFormat = WebMessageFormat.Xml, RequestFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.Bare)]
Message GetSearchResults(string searchTerm);
Run Code Online (Sandbox Code Playgroud)
这是否可能 - 如果没有,有人可以提出替代方案吗?
搜索方法返回任何匹配的文章和最新的非匹配文章,直到指定的数字.
在返回之前,匹配文章的IsMatch属性设置为true,如下所示:
articles = matchingArticles.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);
}
}
Run Code Online (Sandbox Code Playgroud)
在调试中运行测试时,所有断言都会通过,但是在发布中运行测试时,最终断言会失败:
预期:真实但是:是的
在应用程序本身,响应是正确的.
关于为什么会发生这种情况的任何想法?
编辑:
我弄清楚问题是什么.这基本上是一种竞争条件.当我设置测试时,我正在删除db表,重新创建它并用测试数据填充它.由于搜索依赖于全文搜索,因此我在相关列上创建文本索引并将其设置为自动填充.当在调试中运行时,似乎有足够的时间来填充文本索引,并且搜索查询返回匹配项.当我运行测试时,我不认为索引已经及时填充,没有返回匹配并且测试失败.它与日期时间问题类似.如果我在创建目录和运行测试之间设置延迟,则测试通过.