4

我开始在单元测试中使用 Moles,并且在文档方面有点挣扎。

我想鼹鼠 DateTime.Now。

如果您环顾一下这样做的旧方法是添加对 mscorlib 的引用,然后为其添加一个 stubx 文件(添加新项目 -> 用于测试的存根和痣)。

'Stubs and Moles for Testing' 模板已被弃用,您需要做的只是右键单击参考并选择'Add moles assembly',这很好。

VS2010 不允许您直接添加对 mscorlib 的引用,因为我们有对“系统”的引用,这没关系,因为我可以在对象浏览器中看到 DateTime 作为此命名空间的一部分。

如果我为系统引用添加一个痣程序集并重建,我仍然无法解析 MDateTime。

有什么建议么 ?

4

1 回答 1

15

对于 mscorlib 的 Moles,您需要直接右键单击您的测试项目的 References。您将拥有mscorlib 的 Add Moles Assembly。然后,添加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 一起使用。

于 2011-05-11T09:48:24.790 回答