对我的存储库接口进行了单元测试后,我现在正在对我的存储库实现进行单元测试。我发现我在嘲笑很多实施,这让我很舒服。一个例子如下:
Mock<SqlServerDatabaseContext> repoMock = new Mock<SqlServerDatabaseContext>();
repoMock.Setup(foo => foo.QuestionnaireResults).Returns(new List<QuestionnaireResult>()
{
new QuestionnaireResult() { Id = 1, Score = 2 },
new QuestionnaireResult() { Id = 2, Score = 10 }
}.AsEnumerable());
repoMock.Setup(foo => foo.GetNumberOfResults()).Returns(2);
var average = repoMock.Object.CalculateAverage();
Assert.AreEqual(6d, average, "SqlRepository creativity average failed");
...实际实现如下所示:
public class SqlServerDatabaseContext
{
... stuff omitted for brevity ...
public virtual IEnumerable<QuestionnaireResult> QuestionnaireResults
{
get { return dbContext.QuestionnaireResults; }
}
public double CalculateAverage()
{
var testSum = QuestionnaireResults.Sum(foo => foo.Score);
var numberOfRespondents = QuestionnaireResults.Count();
return creativitySum / numberOfRespondents;
}
public virtual int GetNumberOfResults()
{
return QuestionnaireResults.Count();
}
}
调用的 qa 数据库将在我个人控制之外增长和缩小,因此为了测试CalculateAverage 方法,我正在模拟尽可能多的实现,让我想知道这个测试中的值。鉴于我对嘲笑的经验不足,您认为上述方法是一种有效的方法,还是您能指出我更好的方法?
先感谢您。