【问题标题】:How do I get Pex to handle function using DateTime.Now or File.Exists如何让 Pex 使用 DateTime.Now 或 File.Exists 处理函数
【发布时间】:2011-12-15 10:35:51
【问题描述】:

我是 Pex 的新手,我不知道如何将它与机器特定的例程一起使用,例如 DateTime.Now 和 File.Exists()。

我有一个功能可以显示带有时区偏移的截止日期时间。

public class CommonDateTime
{
    public static string ConvertToLongStringWithGmtOffset(DateTime cutoffData)
    {
        return String.Format(
            "{0} {1} GMT (local time is {2})", 
            cutoffData.ToLongDateString(), 
            cutoffData.ToShortTimeString(), 
            DateTime.Now.ToString("zzz"), // here is the problem...
            CultureInfo.InvariantCulture);
    }
}

我有一个由 Pex Explorer 生成的 Pex 参数化测试

[PexClass(typeof(CommonDateTime))]
[TestFixture]
public partial class CommonDateTime_Test
{
    /// <summary>Test stub for ConvertToLongStringWithGmtOffset(DateTime)</summary>
    [PexMethod]
    public string ConvertToLongStringWithGmtOffset(DateTime _cutOffData)
    {
        string result = CommonDateTime.ConvertToLongStringWithGmtOffset(_cutOffData);
        return result;
    }
}

但是,这会生成一个特定于机器的测试 - 当机器处于非 GMT 时区时它会失败。

public partial class CommonDateTime_Test
{
    [Test]
    [PexGeneratedBy(typeof(CommonDateTime_Test))]
    public void ConvertToLongStringWithGmtOffset156()
    {
        string s;
        s = this.ConvertToLongStringWithGmtOffset(default(DateTime));
        PexAssert.AreEqual<string>
            ("Monday, January 01, 0001 12:00 AM GMT (local time is +00:00)", s);
    }
}

在这种情况下我该怎么办?我可以告诉它跳过引用诸如 DateTime.Now 或 File.Exists() 之类的函数的探索函数吗?或者我可以告诉它以某种方式始终使用特定的时区吗?

【问题讨论】:

    标签: c# datetime pex


    【解决方案1】:

    这就是Moles 项目的用途。它可以让你模拟任何东西,包括像 DateTime.Now 这样的内置静态函数。

    适当的“Moled”代码如下所示:

    [PexMethod]
    public string ConvertToLongStringWithGmtOffset(DateTime _cutOffData)
    {
        MDateTime.NowGet = () => /* some value */;
    
        string result = CommonDateTime.ConvertToLongStringWithGmtOffset(_cutOffData);
        return result;
    }
    

    Here's a longer tutorial 实际上以DateTime.Now 为例。

    【讨论】:

      猜你喜欢
      • 2013-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-18
      • 2017-08-23
      相关资源
      最近更新 更多