我需要一种使用 Typemock 伪造 DateTime.Parse 的方法,并让它在使用任何参数调用时返回相同的日期。
我有一个存储加密字符串的数据库字段,该字符串在加载时被解析为日期。保存数据的类有一个 Load() 方法,它将数据库数据复制到它的属性中,解密加密的内容并进行一些基本的验证,例如:
public class BusinessObject{
public DateTime ImportantDate{get;set;}
...
public void Load(DBObject dbSource){
...
ImportantDate = DateTime.Parse(DecryptionService.Decrypt(dbSource.ImportantDate));
}
}
运行时一切正常。
我正在尝试使用 TypeMock 编写一个单元测试,以使用其 Load 方法将一些假数据加载到 BusinessObject 中。BusinessObject 的属性太多,无法从 XML 反序列化,但 DBObject 可以,因此我存储了一些表示有效数据的 XML。
在调用 DecryptionService 来解密数据之前,一切正常 - 它不起作用,因为我的开发机器没有加密过程中使用的数据库证书。我不能将它们放在我的机器上只是为了测试,那将是一个安全漏洞。
我将此添加到我的单元测试中:
Isolate.Fake.StaticMethods<DecryptionService>(Members.ReturnRecursiveFakes);
Isolate.WhenCalled(() => DecryptionService .Decrypt(null)).WillReturn("***");
Isolate.Fake.StaticMethods<DateTime>(Members.ReturnNulls);
Isolate.WhenCalled(() => DateTime.Parse("***" /*DateStr*/)).WillReturn(DateTime.Now.AddYears(2));
DecryptionService 被伪造的第一部分工作,社会保障和其他敏感字符串正在“解密”,但无论我给 DateTime 什么参数,我仍然会得到一个或另一个异常(ArgumentNullException:字符串引用未设置为对象的实例,如果DateStr 为空,为“ * ”时出现 FormatException)
如何(如果)我可以用 typemock 覆盖 DateTime.Parse 以便它返回有效的 DateTime 并传递任何无效的参数?