2012-04-23 3 views
0

私はAutopocoを使ってプロジェクトのテスト/シードデータを生成しています。Autopocoでシードオブジェクトに所定のリストからランダムな値を割り当てる

各会議abjectには、1年の期間(DefaultRandomDateSource)のランダムな日付が割り当てられます。また、会議のオブジェクトには、あらかじめ定義されたリスト(MeetingTitleSource)からランダムなタイトルが割り当てられます。

問題は、会議のタイトルがランダムな時間順に適用されていないことです。つまり、最初の2週間はすべて「Perfromance Meeting」、次に2週間はすべて「Design Meeting」などです。会議のタイトルは完全にランダムに割り当てられます。

誰でも手助けできますか?

ここでシード・データを作成し、自分のコード

//Configure the default properties 
     var meetings = AutoPocoContainer.Configure(x => 
     { 
      x.Conventions(c => { c.UseDefaultConventions(); }); 
      x.Include<Meeting>() 

       .Setup(c => c.StartDate).Use<DefaultRandomDateSource> 
       (DateTime.Parse("21/Mar/2013"), 
       DateTime.Parse("21/Mar/2012")) 
       .Setup(c => c.EndDate).Use<MeetingEndDateSource>(0, 8) 
       .Setup(c => c.Title).Use<MeetingTitleSource>() 

     }); 

     _meetings = meetings.CreateSession().List<Meeting>(MeetingRecords).Get(); 

ここdefaultdateソース

public class DefaultRandomDateSource : DatasourceBase<DateTime> 
{ 
    private DateTime _MaxDate { get; set; } 
    private DateTime _MinDate { get; set; } 
    private Random _random = new Random(1337); 



    public DefaultRandomDateSource(DateTime MaxDate, DateTime MinDate) 
    { 
     _MaxDate = MaxDate; 
     _MinDate = MinDate; 
    } 

    public override DateTime Next(IGenerationContext context) 
    { 
     var tspan = _MaxDate - _MinDate; 

     var rndSpan = new TimeSpan(0, _random.Next(0, (int)tspan.TotalMinutes), 0); 


     return _MinDate + rndSpan; 
    } 
} 

はここであなたはとても同じ同じシードを使用しているMeetingTitleソース

public class MeetingTitleSource : DatasourceBase<string> 
{ 
    private Random mRandom = new Random(1337); 

    public override string Next(IGenerationContext context) 
    { 

     return MeetingNames[mRandom.Next(0, MeetingNames.Length)]; 
    } 

    private static string[] MeetingNames = new String[]{ 
     "Design meeting", 
     "Strategy Meeting", 
     "Performance review", 
     "Appraisal", 
     "Disciplinary", 
     "Project review", 
     "Client Meetings", 
     "Budget Meeting", 
     "Financial Update", 
     "CompStat", 
     "Project Update"      
    }; 
} 
+0

なぜ同じシード値を使用しますか? [docs](http://msdn.microsoft.com/en-us/library/ctssatww.aspx) '異なるランダムオブジェクトに同一のシード値を提供すると、各インスタンスは同じ乱数シーケンスを生成します。 ' –

+0

私はそれが種だと思っていましたが、コードが呼び出されるたびに新しい種の値を生成する方法がわかりません。私はすでにいろいろなことを熱望していました。オートポコがどのように機能するかをもう少し詳しく知りたいと思っているだけで、私は正しい道を向けることができます。 – MrBliz

答えて

1

だだです毎回値のシーケンスが生成されます。

システムクロックからのナノ秒の値は、しばしばシードとして使用されますが、これを試してみるとよいでしょう。

+0

はい、それはトリックでしたが、十分な解像度を得るために100倍しましたが – MrBliz

関連する問題