Почему имитируемый класс коллекции не заполняется внутри тестируемого метода?C#

Место общения программистов C#
Ответить
Anonymous
 Почему имитируемый класс коллекции не заполняется внутри тестируемого метода?

Сообщение Anonymous »

Я тестирую метод, заполняющий пользовательскую коллекцию.
В моем классе пользовательской коллекции есть метод, который требует некоторых дополнительных вещей, которые не важны для моего теста, поэтому я попытался имитировать объект коллекции, чтобы настроить издеваться над этим методом. Пользовательская коллекция является входным параметром метода, который я тестирую, поэтому я отправляю имитируемый объект в качестве входных данных.
Похоже, это работает до тех пор, пока элементы не добавляются в коллекцию. Метод Add выполняется, но коллекция не обновляется, а Count по-прежнему равен 0.
Почему элементы не добавляются в имитируемый объект коллекции?
Вот упрощенная настройка моего кода:

Код: Выделить всё

class MyClass {
private string _item;
public MyClass(string item) {
_item = item;
}
}

class MyCollectionClass : Collection {
public string ApplyEdits() {
// Some advanced stuff that is not important for test
return "Actual value";
}
}

class ClassToBeTested {
public int MethodToBeTested(MyCollectionClass myCollection, string[] items) {
items.ForEach(item => {
var myItem = new MyClass(item);
myCollection.Add(myItem);
// When running the test, this should have updated Count on the collection, but it doesn't
});
// After populate, this method is executed, but it is not important for test:
myCollection.ApplyEdits();
return myCollection.Count;
}
}
И тест:

Код: Выделить всё

[TestMethod]
public void MyTest() {
var mock = new Mock();
mock.Setup(m => m.ApplyEdits()).Returns("dummy");

var classToBeTested = new ClassToBeTested();

var items = new List();
// Populate items
items.Add("test1");
items.Add("test2");
items.Add("test3");

var result = classToBeTested.MethodToBeTested(mock.Object, items.ToArray());
Assert.AreEqual(items.Count, result);

}
Поэтому я думаю, что на самом деле вопрос заключается в следующем: как я могу заставить метод Add фактически добавлять элементы в имитируемый объект коллекции при вызове внутри MethodToBeTested?

Подробнее здесь: https://stackoverflow.com/questions/785 ... -is-tested
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»