我有一个视图模型类,它有一个方法,它使用DateTime.Now根据视图模型上的日期与当前时间之间的时间段进行计算。
我希望能够对该方法进行单元测试,因此我使用了一个可以在测试中存根的时间服务。但是,依赖关系需要以某种方式注入到viewmodel类中。当视图模型被回发到控制器时,比如向视图模型列表添加一个条目,它将被传递到控制器方法的参数中。我希望在这一点上日期服务自动传递到视图模型中。
有谁知道如何实现这一点吗?我在StructureMap中使用Mvc3。
发布于 2011-06-13 17:15:41
我不会在视图模型上做这样的计算。在视图模型上,我会坚持使用POCO属性。我将在将域模型映射到视图模型时执行此计算。这可以在控制器操作中完成,也可以在您有权访问服务层的映射层中完成。
发布于 2011-06-13 18:05:04
你可以编写一个自定义的道布验证器,而不是在视图模型中编写一个方法来验证道布:
public static ValidationResult DOBValidator(DateTime DOB)
{
if (DOB!= null && DOB.Date != DateTime.MinValue.Date)
{
int age = DateTime.Now.Year - DOB.Year;
if (age < 18)
{
return new ValidationResult("Sorry, age should be more than 18 years");
}
}
return ValidationResult.Success;
}
}
然后,您可以在视图模型中使用类似以下内容来装饰您的道布属性:
[CustomValidation(typeof(ViewModelClassName), "DOBValidator")]
在您的单元测试中,您可以只调用viewmodel方法并传递一个虚拟的datetime值:
DateTime testDOB = DateTime.Now.AddYears(-18);
ValidationResult result = ViewModelObject.DOBValidator(testDOB);
Assert.AreEqual(ValidationResult.Success, result, "The ValidationResult was incorrect");
希望这能有所帮助。
https://stackoverflow.com/questions/6328427
复制相似问题