加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 单元测试在调试时通过,但在运行时失败

发布时间:2020-12-16 01:44:48 所属栏目:百科 来源:网络整理
导读:搜索方法返回任何匹配的文章和最新的非匹配文章,直到指定的数字. 在返回之前,匹配文章的IsMatch属性设置为true,如下所示: articles = matchingArticles.Select(c = {c.IsMatch = true; return c;}).ToList(); 在测试这种方法时, [Test] public void SearchF
搜索方法返回任何匹配的文章和最新的非匹配文章,直到指定的数字.

在返回之前,匹配文章的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);
        }
    }

在调试中运行测试时,所有断言都会通过,但是在发布中运行测试时,最终断言会失败:

预期:是的
??但是:是的

在应用程序本身,响应是正确的.

关于为什么会发生这种情况的任何想法?

编辑:

我弄清楚问题是什么.这基本上是一种竞争条件.当我设置测试时,我正在删除db表,重新创建它并用测试数据填充它.由于搜索依赖于全文搜索,因此我在相关列上创建文本索引并将其设置为自动填充.当在调试中运行时,似乎有足够的时间来填充文本索引,并且搜索查询返回匹配项.当我运行测试时,我不认为索引已经及时填充,没有返回匹配并且测试失败.它与日期时间问题类似.如果我在创建目录和运行测试之间设置延迟,则测试通过.

解决方法

Pones,你已经澄清了单元测试在不调试时失败了.

在这个阶段它可能是任何东西但是你应该继续运行单元测试而不是调试并在你知道的某个地方插入以下语句(或者你认为你知道)是真的

if(condition)
            Debugger.Launch();

这将显而易见,并允许你区分什么是错误的.我建议的地方是IsMatch属性(适合初学者)

你可以遇到这样的问题的另一个常见的地方是使用DateTime.如果您的单元测试运行“太快”,那么它可能会打破您的假设.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读