Проверьте, чтобы убедиться, что оператор Linq был выполнен, когда возвращает массив целых чисел

#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. Спасибо за ответ, и вы правы, я проводил этот тест, хотя в этом нет особого смысла, но размещение виртуальных работало