2011-12-15 11 views
1

私はPexが新しく、DateTime.NowやFile.Exists()などのマシン固有のルーチンで使用する方法はわかりません。DateTime.NowまたはFile.Existsを使用してPexを処理するにはどうすればいいですか

私はタイムゾーンオフセットでカットオフDateTimeを表示する機能を持っています。

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のエクスプローラ

[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; 
    } 
} 

によって生成されますPexのパラメータ化テストを持っている - マシンが非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()などの関数を参照する関数の探索をスキップするように指示できますか?それとも、いつも特定のタイムゾーンを使用するように指示することはできますか?

答えて

3

これはMolesプロジェクトの対象です。それはDateTime.Nowのような組み込みの静的関数を含む基本的に何かを模倣することができます。実際にはその一例として、DateTime.Now使用

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

    string result = CommonDateTime.ConvertToLongStringWithGmtOffset(_cutOffData); 
    return result; 
} 

Here's a longer tutorial

適切な 'M​​oled' のコードは次のようになります。

関連する問題