我想使用测试数据作为输入,进入真正的方法。
调用GetSurveyList时,它不会注意我给它的日期。它总是返回我手动添加到模拟模型中的所有三个项目。它应该检查日期,并且仅返回日期等于或大于输入日期的那些项目。
如果我介入,那么我只会深入到界面。调用的下一步应该转到实现该接口的代码,而没有。这是Moq的标准行为吗?我以为它可以让您介入?
这是我的代码:
[TestMethod]
public void TestHasListOfSurveys()
{
var mockRepository = new Mock<ISurveyListRepository>();
var mockModel = new List<SurveyList>();
mockModel.Add(new SurveyList { SurveyID = 1, SurveyName = "test1", DeliveryDate = DateTime.Parse("1/1/2014") });
mockModel.Add(new SurveyList { SurveyID = 2, SurveyName = "test2", DeliveryDate = DateTime.Parse("6/1/2014") });
mockModel.Add(new SurveyList { SurveyID = 3, SurveyName = "test3", DeliveryDate = DateTime.Parse("12/1/2014") });
string testDate = DateTime.Today.ToShortDateString();
mockRepository.Setup(x => x.GetSurveyList(testDate)).Returns(mockModel);
var testClass = new SurveyListModel(mockRepository.Object);
var testModel = testClass.GetSurveyList(testDate);
mockRepository.VerifyAll();
Assert.IsTrue(testModel.Count > 0);
}
从资源库中获取GetSurveyList:
公共类SurveyListRepository:ISurveyListRepository
public List<SurveyList> GetSurveyList(String deliveryDateAfterInput)
{
List<SurveyList> SurveyLists = new List<SurveyList>();
string error = string.Empty;
using (OrderingEntities db = DierbergsAppLib.Entities.EntityFactory.GetInstance<OrderingEntities>(
new DierbergsAppLib.Entities.EntityFactory.EntityFactoryOptions()
{
EntityNameInConfigFile = "OrderingEntities",
ConnectionStringCacheManager = new DierbergsAppLib.Entities.WebCacheConnectionStringManager()
},
out error))
{
DateTime deliveryDateFilter = Convert.ToDateTime(deliveryDateAfterInput);
var SurveyList = db.uspOrderSurveyListAllStoresGet(deliveryDateFilter);
foreach (uspOrderSurveyListAllStoresGet_Result viewsurvey in SurveyList)
{
// SurveyLists.Add( )
}
}
List<SurveyList> all = SurveyLists.OrderBy(x => x.SurveyDueDate).ToList();
return all;
}
来自模型的GetSurveyList:
公共类SurveyListModel
public List<SurveyList> GetSurveyList(String deliveryDateAfterInput)
{
return _repository.GetSurveyList(deliveryDateAfterInput);
}
测试是您代码的规范。让我们考虑一下SurveyListModel
您要通过此测试指定哪种行为方案。在这种情况下,逻辑非常简单:
SurveyListModel应该从存储库返回指定日期的调查
因此,如果您停下来思考,那就不应该验证返回的调查的日期。SurveyListModel职责不涉及以任何方式修改存储库响应。它应该执行以下操作-将date参数传递到一种特定的存储库方法,然后将存储库响应返回给调用方。没有其他的。这就是您应该验证的内容。
var repositoryMock = new Mock<ISurveyListRepository>();
string date = DateTime.Today.ToShortDateString();
repositoryMock.Setup(r => r.GetSurveyList(date)).Returns(CreateTestSurveys());
var model = new SurveyListModel(repositoryMock.Object);
var surveys = model.GetSurveyList(date);
repositoryMock.VerifyAll();
CollectionAssert.AreEqual(CreateTestSurveys(), surveys);
该测试验证
您应该了解,在这种情况下,返回哪个存储库确实无关紧要。可以是带有任何日期的调查,也可以是上面的空列表。您应该只验证SUT返回了完全相同的集合。
注意:DateTime
用于传递日期值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句