Подтвердить что ты не робот

Проверка Moq с параметром объекта

Я пытаюсь проверить параметр, являющийся классом. Проверяемый код в порядке. Ошибка находится в тесте.

Я пробовал два метода, оба из которых потерпели неудачу.

Вот мои попытки:

1

this.MockImageResizeFilter.Verify(m => m.Filter(this.UploadedFileData, new ImageFilterOptions()
    {
        Width = 256,
        Height = 256,
    }));

Это всегда терпит неудачу, хотя объект, прошедший как второй параметр, имеет равные свойства. Первый параметр проверяется штрафом.

2:

this.MockImageResizeFilter.Setup(m => m.Filter(It.IsAny<byte[]>(), It.IsAny<ImageFilterOptions>()))
    .Callback<byte[], ImageFilterOptions>((data, options) =>
        {
            Assert.AreEqual(this.UploadedFileData, data, "data");
            Assert.AreEqual(filterOptions.Width, options.Width, "Width");
            Assert.AreEqual(filterOptions.Height, options.Height, "Height");
        }
    );

Это всегда проходит, даже если оно не работает. Утверждения в обратном вызове не сработают, но исключение не передается во внешний контекст, и поэтому тест всегда проходит.

Можете ли вы помочь мне найти то, что я делаю неправильно?

4b9b3361

Ответ 1

Первая попытка ближе к тому, чего вы хотите достичь.

Причина, по которой это не удается, заключается в том, что Moq (возможно) использует Object.Equals под обложкой для проверки, если параметр ImageFilterOptions, с которым был вызван метод, - это тот же экземпляр, что и тот, который вы указали при вызове Verify.

Для них невозможно быть одним и тем же экземпляром, потому что в Verify вы создаете new ImageFilterOptions().

Вместо того, чтобы выполнять параметр, проверьте этот способ, вы можете использовать синтаксис Moq It.Is, чтобы предоставить выражение, которое проверяет, что параметр был ожидаемым.

В вашем случае вы хотите проверить, что параметр имеет тип ImageFilterOptions и что для Width и Height установлено значение 256. Выражение, которое позволяет вам сделать это:

It.Is<ImageFilterOptions>(p => p.Width == 256 && p.Height == 256)

Итак, ваш вызов Verify может выглядеть так:

this.MockImageResizeFilter.Verify(m => m.Filter(
            this.UploadedFileData,
            It.Is<ImageFilterOptions>(p => p.Width == 256 && p.Height == 256)));