Я тестирую метод, который вызывает другие методы. У меня есть рабочий тест, который использует этот метод для создания моего высмеивал объект соединения:Код конденсирования: 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
.
Это Linq? Он не строится, когда я помещаю его в свой код. У длинного массива вроде бы нет метода 'Select'. –
Извините, я обновил свой код –
Спасибо! Это прекрасно работает. Ключ получил эту переменную 'sequence'. –