5

ここに私のオブジェクトがあります:

public class Symbol
{
   private readonly string _identifier;
   private readonly IList<Quote> _historicalQuotes;

   public Symbol(string identifier, IEnumerable<Quote> historicalQuotes = null)
   {
      _identifier = identifier;
      _historicalQuotes = historicalQuotes;
   }
}

public class Quote
{
    private readonly DateTime _tradingDate;
    private readonly decimal _open;
    private readonly decimal _high;
    private readonly decimal _low;
    private readonly decimal _close;
    private readonly decimal _closeAdjusted;
    private readonly long _volume;

    public Quote(
        DateTime tradingDate,
        decimal open,
        decimal high,
        decimal low,
        decimal close,
        decimal closeAdjusted,
        long volume)
    {
        _tradingDate = tradingDate;
        _open = open;
        _high = high;
        _low = low;
        _close = close;
        _closeAdjusted = closeAdjusted;
        _volume = volume;
    }
}

Quote のリストが入力された Symbol のインスタンスが必要です。

私のテストでは、終値が特定の値を下回っている、または上回っているすべての見積もりを返すことができることを確認したいと考えています。これが私のテストです:

[Fact]
public void PriceUnder50()
{
    var msftIdentifier = "MSFT";
    var quotes = new List<Quote>
    {
        new Quote(DateTime.Parse("01-01-2009"), 0, 0, 0, 49, 0, 0), 
        new Quote(DateTime.Parse("01-02-2009"), 0, 0, 0, 51, 0, 0), 
        new Quote(DateTime.Parse("01-03-2009"), 0, 0, 0, 50, 0, 0), 
        new Quote(DateTime.Parse("01-04-2009"), 0, 0, 0, 10, 0, 0)
    };

    _symbol = new Symbol(msftIdentifier, quotes);


    var indicator = new UnderPriceIndicator(50);
    var actual = indicator.Apply(_symbol);

    Assert.Equal(2, actual.Count);
    Assert.True(actual.Any(a => a.Date == DateTime.Parse("01-01-2009")));
    Assert.True(actual.Any(a => a.Date == DateTime.Parse("01-04-2009")));
    Assert.True(actual.Any(a => a.Price == 49));
    Assert.True(actual.Any(a => a.Price == 10));
}

わかった。

今、私は Autofixture を使用してそれをやりたいと思っています。私は本当の初心者です。このツールについてインターネットで読めるものはほとんどすべて読みました (著者のブログ、codeplex の FAQ、github のソース コード)。Autofixture の基本的な機能は理解していますが、実際のプロジェクトで Autofixture を使用したいと考えています。これが私がこれまでに試したことです。

var msftIdentifier = "MSFT";

var quotes = new List<Quote>();
var random = new Random();
fixture.AddManyTo(
    quotes,
    () => fixture.Build<Quote>().With(a => a.Close, random.Next(1,49)).Create());
quotes.Add(fixture.Build<Quote>().With(a => a.Close, 49).Create());

_symbol = new Symbol(msftIdentifier, quotes);

// I would just assert than 49 is in the list
Assert.True(_symbol.HistoricalQuotes.Contains(new Quote... blabla 49));

理想的には、Symbol のフィクスチャを直接作成したいのですが、引用符のリストをカスタマイズする方法がわかりません。また、別のテストでは、特定の値が下ではなく上にあることを確認する必要があるため、私のテストが一般的であるかどうかはわかりません。そのため、「フィクスチャ コード」を複製し、手動で引用符を追加します = 51.

だから私の質問は:

1 - autofixture の使用方法はこれですか?

2 - 私の例で autofixture を使用する方法を改善することは可能ですか?

4

1 に答える 1