我们的集成测试中的多个数据库上下文似乎间歇性地失败,并且添加ToList()不能解决问题

我在作为单元测试运行的同事的集成测试中遇到间歇性问题。有时它可以在我的机器上工作,有时却不能,尽管当它停止工作时,似乎卡住了一段时间。我也没有弄清楚如何使它重新工作。

当我尝试对其进行调试时,该错误在第二个DBContext(ctx1)中-错误显示:

  1. Message ='MyCollection'的'UpdatedOn'属性无法设置为'null'值。您必须将此属性设置为“ System.DateTime”类型的非空值。 Source = EntityFramework

  2. collection.Local中只有一个项目-这是在先前上下文中添加的新项目。

  3. collection.ResultsView-当我尝试枚举收集结果时,出现另一个错误: “已经有与此命令关联的打开的DataReader,必须先关闭它。”

MyDBContext最终基于EF6 DbContext。

        public void CanAddItem()
        {
            using (var transaction = new TransactionScope(TransactionScopeOption.Required,new TimeSpan(0,15,0),TransactionScopeAsyncFlowOption.Enabled))
            {
                int initialCount;
                // Arrange
                using (IMyDBContext ctx = new MyDBContext(new AppConfigReader()))
                {
                    var matched = ctx.MyCollection;

                    initialCount = matched.Count();

                    var item = new MyItem
                    {
                        UpdatedOn = DateTime.Now;
                    };

                    // act
                    ctx.MyCollection.Add(item);
                    ctx.SaveChanges();
                }

                //Assert
                using (IMyDBContext ctx1 = new MyDBContext(new AppConfigReader()))
                {
                    var collection = ctx1.MyCollection;

                    collection.Should().HaveCount(initialCount + 1);
                }
            }

我尝试将.ToList()添加为var collection = ctx1.MyCollection.ToList(),但这只是将错误移至该行代码中。

我认为他使用两个上下文的理由是证明该值始终写入数据库,并且不会卡在DbContext中。它总是在他的机器上运行。

我需要使其正常运行,以使其始终有效。任何帮助将不胜感激。

shz832003dky 回答:我们的集成测试中的多个数据库上下文似乎间歇性地失败,并且添加ToList()不能解决问题

因为世界必须看到我的愚蠢错误。最终,我运行了SQL查询,使我意识到实体定义与数据库定义不相同,并且在我的数据库中,不时地有值,其中UpdatedOn WAS NULL!

经验教训。

本文链接:https://www.f2er.com/2844523.html

大家都在问