我编写单元测试哪个方法使用数据库检查存在记录,但是当我在应用程序上调试它返回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;
}
}
答案 0 :(得分:1)
针对真实资源(如数据库)调用的测试称为集成测试,而不是单元测试。在您的情况下,您不需要进行集成测试,因为您正在使用由EF开发人员进行广泛测试的实体框架。
解决您的问题:我相信,您的开发环境中的连接字符串与测试环境中的连接字符串不同。 DbContext有一个属性,比如Connection(我不知道确切的名称,但是使用IntelliSense或在调试测试期间检查对象,你应该能够找到它),您可以使用它来比较连接字符串。但我宁愿mock the DbContext。您可以在Wikipedia上阅读有关模拟的内容。
并且,如果你不知道它,而不是使用.FirstOrDefault()然后检查null,你可以使用.Any()方法,它返回一个布尔值,它告诉你,是否有给定的进入条件。