使用Moles和DateTime

4

我开始在单元测试中使用 Moles,但对文档有些困惑。

我想 moles DateTime.Now。

如果您查看旧的方法,那么添加 mscorlib 的引用,然后为其添加 stubx 文件(添加新项-> 用于测试的存根和摇杆)是一种方式。

“用于测试的存根和摇杆”模板已被弃用,现在您只需要右键单击引用并选择“添加摇杆程序集”,这很好。

VS2010 不允许您直接添加对 mscorlib 的引用,因为我们有一个对 "System" 的引用,这没问题,因为我可以在对象浏览器中看到 DateTime 作为该命名空间的一部分。

如果我为 System 引用添加一个摇杆程序集并重新构建,则仍无法解析 MDateTime。

有什么建议吗?

1个回答

15

对于Moles的mscorlib,您需要直接右键单击测试项目的引用。 您将有添加mscorlib的Moles程序集。 然后,在您的测试类中添加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 一起使用。


我尝试了“为mscorlib添加Moles程序集”,但是在构建时它给了我成千上万个错误。大多数是由于缺少程序集引用而导致的类型/命名空间解析错误。有什么想法吗? - smwikipedia
那是一个非常棒的答案 +1。 - Rahul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接