我在页面后面的 asp.net 代码中有以下方法,它调用存储过程并返回结果。我不确定我应该为测试该方法而编写的单元测试方法的定义。
public List<BlogDetail> GetData()
{
List<BlogDetail> allBlogDetail = new List<BlogDetail>();
using (var db = new BloggingContext("CodeFirstSampleConnectionString")) //name=CodeFirstSample
{
allBlogDetail = db.Database.SqlQuery<BlogDetail>("uspGetAllBlogs").ToList();
}
return allBlogDetail;
}
以下是我为测试此方法而编写的单元测试方法。据我所知,在单元测试中进行数据库调用不是一个好习惯,我在单元测试方法中进行数据库调用违反了这一点。
public void GetDataTest()
{
Default target = new Default();
List<BlogDetail> expected = new List<BlogDetail>();
List<BlogDetail> actual = new List<BlogDetail>();
using (var db = new BloggingContext("DemoConnectionString"))
{
expected = db.Database.SqlQuery<BlogDetail>("uspGetAllBlogs").ToList();
}
actual = target.GetData();
Assert.AreEqual(expected.Count, actual.Count);
for (int i = 0; i < expected.Count; i++)
{
Assert.AreEqual(expected[i].BlogID, actual[i].BlogID);
Assert.AreEqual(expected[i].BlogName, actual[i].BlogName);
Assert.AreEqual(expected[i].PostID, actual[i].PostID);
Assert.AreEqual(expected[i].PostTitle, actual[i].PostTitle);
Assert.AreEqual(expected[i].PostContent, actual[i].PostContent);
}
}
我已经读过单元测试应该是可重复和可预测的,并且通过编写上述方法,我违反了这两个规则。
此单元测试在本地数据库中运行至少需要 30 秒,显然在使用远程数据库进行测试时需要更多时间。
存储过程的结果也是不可预测的,因为存储过程在不同时间调用时可以返回变量记录。由于数据库定期提供数据。
我不知道单元测试方法的定义。我的单元测试方法正确吗?我需要采取不同的方法吗?请帮忙。