2016-08-31 2 views
1

Я тестирую метод, который вызывает другие методы. У меня есть рабочий тест, который использует этот метод для создания моего высмеивал объект соединения:Код конденсирования: SetupSequence, возвращающий разные значения при последовательных вызовах

private Mock<IDatabaseConnection> MockOutGetControlDocInfoData() 
    { 
     Mock<IDatabaseConnection> mockConn = new Mock<IDatabaseConnection>(); 
     List<Mock<IDbCommand>> mockCmds = new List<Mock<IDbCommand>>(); 
     List<long> vals = new List<long>() { 2, 2, 2, 2, 10, 2, 2, 2, 2, 2 }; 
     foreach (long val in vals) 
     { 
      mockCmds.Add(CreateMockCmdObjectWithReturnValue(val)); 
     } 
     mockConn.SetupAllProperties(); 
     mockConn.Setup(c => c.Conn.ConnectionString).Returns("What the heck."); 
     mockConn.SetupSequence(c => c.CreateCommand(It.IsAny<string>())) 
      .Returns(mockCmds[0].Object) 
      .Returns(mockCmds[1].Object) 
      .Returns(mockCmds[2].Object) 
      .Returns(mockCmds[3].Object) 
      .Returns(mockCmds[4].Object) 
      .Returns(mockCmds[5].Object) 
      .Returns(mockCmds[6].Object) 
      .Returns(mockCmds[7].Object) 
      .Returns(mockCmds[8].Object) 
      .Returns(mockCmds[9].Object); 
     return mockConn; 
    } 

Я не доволен SetupSequence Returns, который, кажется, как это должно быть частью цикла, но я не знаете, как положить несколько возвратов в SetupSequence. Любая идея для улучшения?

На данный момент, по крайней мере, я в порядке с созданием списка тестовых значений вручную.

Это не должно быть релевантно, но при необходимости я могу указать код CreateMockCmdObjectWithReturnValue.

ответ

3
var sequence = mockConn.SetupSequence(c => c.CreateCommand(It.IsAny<string>())); 
foreach (var cmd in mockCmds) 
{ 
    sequence = sequence.Returns(cmd.Object); 
} 
+0

Это Linq? Он не строится, когда я помещаю его в свой код. У длинного массива вроде бы нет метода 'Select'. –

+0

Извините, я обновил свой код –

+0

Спасибо! Это прекрасно работает. Ключ получил эту переменную 'sequence'. –

 Смежные вопросы

  • Нет связанных вопросов^_^