#c# #visual-studio #linq #unit-testing #testing
Вопрос:
Я хочу проверить, был ли выполнен метод, но этот метод использует оператор linq и возвращает массив целых чисел, и у меня следующая ошибка:
Система.Исключение NotSupportedException: «Неподдерживаемое выражение: m => m.Удалить(справа, 0) Не переопределяемые элементы (здесь: Сортировка по алгоритмам.Удалить) не могут использоваться в выражениях настройки / проверки».
Это тот метод, который я тестирую:
public int[] Merge(int[] left, int[] right)
{
int[] result = new int[left.Length right.Length];
int i = 0, j = 0, k = 0;
while (left.Length != 0 || right.Length != 0)
{
if (left.Length > 0 amp;amp; left[i] <= right[j])
{
result[k] = left[i];
left = Remove(left, i);
k;
}
else
{
result[k] = right[j];
right = Remove(right, j);
k;
}
if (left.Length == 0)
{
while (right.Length != 0)
{
result[k] = right[j];
right = Remove(right, j);
k;
}
}
if (right.Length == 0)
{
while (left.Length != 0)
{
result[k] = left[i];
left = Remove(left, i);
k;
}
}
}
return resu<
}
Вот метод удаления:
public int[] Remove(int[] array, int i)
{
return array.Where(x => x != array.ElementAt(i)).ToArray();
}
Это мой тест:
[TestMethod]
public void Merge_CheckRemoveIsCalled()
{
int[] array = { -2, 80, };
var mock = new Mock<SortingAlgorithms>();
var mockLinq = new Mock<IQueryable>();
int[] left = { 80 };
int[] right = { -2 };
mock.Setup(m => m.Remove(right, 0)).Returns(array);
shorting.Merge(left, right);
mock.Verify(x => x.Remove(It.IsAny<int[]>(), It.IsAny<int>()));
}
Как я мог издеваться над этим методом удаления?
Комментарии:
1.Лучший вопрос в том, зачем вам понадобилось издеваться над этим методом. Похоже, вы издеваетесь над конкретным классом, что не имеет смысла. Что вам следует проверить
Merge
, так это то, правильно ли работает метод (с учетом конкретного ввода, приводит к объединению вывода), а не делает ли он это, вызывая какой-то конкретный, конкретный, неблокируемыйRemove
метод некоторое время-это ничего не доказывает (почти). Тем не менее, если вы думаете иначе,Remove
virtual
этого должно быть достаточно, чтобы позволить издеваться.2. Спасибо за ответ, и вы правы, я проводил этот тест, хотя в этом нет особого смысла, но размещение виртуальных работало