2016-09-09 3 views
0

Есть много вопросов, которые уже заданы по этому вопросу, но я думаю, что мне нужно что-то более базовое, что может очистить эту концепцию, поскольку я новичок в TDD. Пока я не могу идти вперед.Что это такое.Адны и что это такое. В модульном тестировании

Не могли бы вы пройти следующий TestMethod и объяснить, если у меня есть неправильное понимание:

[Test] 
public void ShouldSearch() 
{ 
     var ColumnList = new List<Column>(); 

В приведенной ниже линии означает, что я насмешливый объект.

Но что это такое It.IsAny<>() означает здесь?

this.ColumnServiceMock.Setup(x => x.GetColumn(It.IsAny<Context>(), It.IsAny<Column>())) 
         .Returns(ColumnList); 

var result = this.getColouminfo.GetFinalRecords(this.context, this.gridColumn); 

this.ColumnServiceMock.Verify(x => x.GetColumn(It.Is<Context>(y => y == this.context), 
It.Is<Column>(y => y.Id == 2)), Times.Once); 

    Assert.AreEqual(1, result.Data.Count, "Not equal"); 

    Assert.IsTrue(result.Data.Success, "No success"); 

ответ

2

It.IsAny<T> проверяет, что параметр типа T, его может быть любым экземпляром типа Т. Это в основном говорит: мне все равно, что вы здесь проходите.

this.ColumnServiceMock.Setup(x => x.GetColumn(It.IsAny<Context>(), It.IsAny<Column>())).Returns(ColumnList);

выше говорит всякий раз, когда метод GetColumn вызывается с любыми параметрами, вернуть ColumnList.

It.Is<T> позволяет вам проверить, что было передано, и определить, соответствует ли передаваемый параметр в соответствии с вашими потребностями.

this.ColumnServiceMock.Verify(x => x.GetColumn(It.Is<Context>(y => y == this.context), It.Is<Column>(y => y.Id == 2)), Times.Once);

Вышесказанное утверждает, что метод GetColumn был назван только один раз с параметром Context равным this.Context и Column параметра, свойство Id равно 2.

+0

В контексте с ответом, когда мы создаем и мы говорим, что GetColumn будет вызываться с любым экземпляром Context и любым экземпляром столбца, в то же время делает ли этот оператор вызов метода GetColoum? – Sweetie

+1

Вызов метода установки не вызывает метод, он просто гарантирует, что когда этот метод будет вызываться в какой-то момент в будущем, он вернет ожидаемое значение. Скажем, например, у вас есть репозиторий с методом GetData, который отправляется в базу данных и возвращает некоторые строки, и контроллер, который имеет зависимость от репозитория и форматирует данные. Если вы тестируете контроллер, вы не хотите подключаться к базе данных, чтобы создать макетный репозиторий и вызвать программу установки, чтобы убедиться, что ваш метод GetData возвращает некоторые данные примера для потребления контроллером. – ChrisO

+1

Спасибо v.mch :) – Sweetie

1

It.IsAny<T>() указывает что-либо подобное.

It.Is<T>() более конкретный и занимает лам, чтобы убедиться, что он точно соответствует этому.

Оба - это просто способы указать аргумент, который вы не хотите указывать точно, когда насмехаетесь. Так, например, если аргумент является строковым именем, и вам не важно точное имя в вашем тесте, вы можете использовать:

It.IsAny<string>() в вашей макетной спецификации, которая будет соответствовать любой строке.

Если вы всегда хотите, чтобы имя, чтобы начать с «S», то вы можете сделать

It.IsAny<string>(x => x.StartsWith("S")), который будет соответствовать только строки, начинающиеся с S.