我开始在单元测试中使用 Moles,并且在文档方面有点挣扎。
我想要痣 DateTime.Now。
如果您查看执行此操作的旧方法是添加对 mscorlib 的引用,然后为其添加一个 stubx 文件(添加新项目 -> stub 和痣进行测试)。
“用于测试的 stub 和痣”模板已被弃用,您需要做的就是右键单击一个引用并选择“添加痣组件”,这很好。
VS2010 不允许您直接添加对 mscorlib 的引用,因为我们有对“系统”的引用,这是可以的,因为我可以在对象浏览器中看到 DateTime 作为该命名空间的一部分。
如果我为 System 引用添加一个 moles 程序集并重建,我仍然无法解析 MDateTime。
有什么建议么 ?
最佳答案
对于 mscorlib 的 Moles,您需要直接右键单击您的测试项目的 References。您将拥有 Add Moles Assembly for mscorlib 。
然后,将 using System.Moles;
添加到您的测试类中,因为您需要 System.DateTime 的 Moles(实际上,您还需要更多)。
[TestMethod()]
[HostType("Moles")]
public void DateTimeMolesTest()
{
DateTime date = new System.DateTime(2000, 1, 1, 2, 3, 4, 5);
MDateTime.NowGet = () => date;
Assert.AreEqual(date, DateTime.Now);
}
如果您运行此测试,它将失败,因为您需要添加:
using Microsoft.Moles.Framework;
[assembly: MoledType(typeof(System.DateTime))]
然后,您的测试将成功。
不要忘记 Moles 不能与某些特殊类型的 mscorlib 一起使用。
关于unit-testing - 在 DateTime 中使用 Moles,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5961982/