使用LINQ时,C#DataDriven Unit Test会引发错误

时间:2016-11-07 17:47:57

标签: c# entity-framework linq unit-testing

我正在使用microsoft.visualstudio.testtools 10.0和EntityFramework 6.0,

  1. 我有方法" validateAlreadyEnroll"执行linq查询。
  2. 我有一个单元测试" testAlreadyEnroll"调用" validateAlreadyEnroll"
  3. 如果我对linq查询发表评论,
  4. testAlreadyEnroll失败或成功,否则崩溃。
  5. 有app.config设置数据驱动测试
  6. 这是版本的问题吗?请帮忙。

    主要方法:

    public static bool validateAlreadyEnroll(int sectionid, int personid, ref string extramessage, ref validationResult vr)
        {
    
           int n = (from e in db.Enrollments where e.SectionID == sectionid && e.EnrolledPersonID == personid select e).ToList().Count();
            if(n == 0){
                return false;
            }
    
            var statusid2 = db.Database.SqlQuery<resultStatusID>("select top 1 EnrollmentStatusID from Enrollment where SectionID = " + sectionid + " and EnrolledPersonID = " + personid + " order by EnrollmentID desc").ToList();
            if (statusid2[0].EnrollmentStatusID == CANCELREQUEST) {
                return false;
            } 
    
            return true;
        }
    

    单元测试:

    [TestMethod]
        [DataSource("DataSource3")]
        [DeploymentItem("Regi.Service.Tests\\tests.xlsx")]
        public void testAlreadyEnroll()
        {
            int n;
            int sectionid;
            if (Int32.TryParse(TestContext.DataRow["sectionid"].ToString(), out n))
            {
                sectionid = Int32.Parse(TestContext.DataRow["sectionid"].ToString());
            }
            else
            {
                sectionid = 0;
            }
    
            int personid;
            if (Int32.TryParse(TestContext.DataRow["personid"].ToString(), out n))
            {
                personid = Int32.Parse(TestContext.DataRow["personid"].ToString());
            }
            else
            {
                personid = 0;
            }
    
            bool answer = Helper.validateAlreadyEnroll(sectionid, personid, ref msg, ref vr);
            bool result = Convert.ToBoolean(TestContext.DataRow["result"].ToString());
            Assert.AreEqual(answer, result, "Failure");
        }
    

    Part of the app.config file

    This is the error I get

2 个答案:

答案 0 :(得分:0)

查看错误代码,我认为您的项目或数据库配置错误。也许添加对程序集的引用。

此外,如果您想要正确地进行测试驱动开发,那么您应该拥有更小的测试用例。例如,只检查db.Enrollments.Count()&gt; 0表示您的数据源。 这将很快找出问题。

//旧的,不正确的建议: 但我认为Linq声明不知道'&amp;&amp;'作为逻辑操作数。请改用“和”。

答案 1 :(得分:0)

最后!

我需要的DbContext构造函数:var ensureDLLIsCopied = System.Data.Entity.SqlServer.SqlProviderServices.Instance;而且“名称”没有被正确引用,我也比较旧的版本和this.Configuration.LazyLoadingEnabled = false;失踪,为了更好地解释我发现这篇文章:Buildserver can not find Entity Framework Sql Provider