public void CreateStreamTest() { const string symbol = "Symbol"; const string column = "Column"; var mockStream1 = new MockStream(3); var mockDbUpdater = Substitute.For <ITimeSeriesDbUpdater>(); mockDbUpdater.CreateColumnWriter(Arg.Any <string>(), Arg.Any <ColumnInfo>(), Arg.Any <DateTime>()) .Returns(mockStream1); var allocator = new DummyPinnedAllocator(); var recorder = new TimeSeriesRecorder( symbol, mockDbUpdater, allocator); var now = "08:00:00"; recorder.AddRow(now) .Record(column, 1) .Record(column, 2); mockDbUpdater.Received(1) .CreateColumnWriter( Arg.Is <string>(i => i == symbol), Arg.Is <ColumnInfo>(i => i.Name == column && i.Type == FieldType.Int32), Arg.Is <DateTime>(i => i == "08:00:00".ToDateTime())); mockDbUpdater.ClearReceivedCalls(); mockStream1.CheckCallsThenClear(); now = "08:00:01"; recorder.AddRow(now) .Record(column, 3) .Record(column, 4) .Record(column, 5); mockDbUpdater.ClearReceivedCalls(); mockStream1.CheckCallsThenClear(); mockStream1.CheckData(E("08:00:00", 1), E("08:00:00", 2), E("08:00:01", 3), E("08:00:01", 4), E("08:00:01", 5)); now = "08:00:02"; recorder.AddRow(now) .Record(column, 6); recorder.Commit(); mockStream1.CheckCallsThenClear(1, 0, 1); var columns = new[] { C(column, FieldType.Int32, "08:00:00", "08:00:02") }; mockDbUpdater.Received(1).Commit( Arg.Is <string>(i => i == symbol), Arg.Is <ColumnCommit[]>(i => IsEqual(i, columns))); }