如何使用数据库进行单元测试

时间:2015-04-12 16:27:11

标签: asp.net-mvc unit-testing

我编写单元测试哪个方法使用数据库检查存在记录,但是当我在应用程序上调试它返回true时,但是当单元测试上的调试它返回false时,我想我从数据库中删除了一些像mock这样的东西来创建数据。我是单位test.pls的新手帮助我解决它。

  public void Test_Exist_Record_Db(TriangleModel triangle, bool regext)
    {
        //Arrange
        bool isExist = false;
        //Act        
            isExist = _repository.IsCalculatedBefore(triangle);         
        //Assert
        Assert.AreEqual(isExist, regext);
    }

此方法使用数据库

 public bool IsCalculatedBefore(TriangleModel triangle)
    {
        using (var db = new TriangleModelDataContext())
        {
            var temp =
                db.TriangleModels.FirstOrDefault(
                    x =>
                        x.LengthSideA ==triangle.LengthSideA && 
                        x.LengthSideB == triangle.LengthSideB &&
                        x.LengthSideC == triangle.LengthSideC);
            if (temp != null)
            {
                return true;
            }
            return false;
        }   
    }

1 个答案:

答案 0 :(得分:1)

针对真实资源(如数据库)调用的测试称为集成测试,而不是单元测试。在您的情况下,您不需要进行集成测试,因为您正在使用由EF开发人员进行广泛测试的实体框架。

解决您的问题:我相信,您的开发环境中的连接字符串与测试环境中的连接字符串不同。 DbContext有一个属性,比如Connection(我不知道确切的名称,但是使用IntelliSense或在调试测试期间检查对象,你应该能够找到它),您可以使用它来比较连接字符串。但我宁愿mock the DbContext。您可以在Wikipedia上阅读有关模拟的内容。

并且,如果你不知道它,而不是使用.FirstOrDefault()然后检查null,你可以使用.Any()方法,它返回一个布尔值,它告诉你,是否有给定的进入条件。