Moq ожидают на IRepository передачу выражения

Сообщение ясно

System.String не может быть преобразовано в System.Byte []

в этот момент

<asp:Image ID="woundimage" runat="server" ImageUrl='<%# "data:image/png;base64," 
 + Convert.ToBase64String((byte[])Eval("image_file"))%>' Height="150px" Width="150px"></asp:Image>
[ 115]

Eval("image_file")

- это строка, а не байт [], объявление - строка, сохранение в базу данных - строка - так что это главная ошибка.

9
задан Steve Horn 13 November 2008 в 11:40
поделиться

5 ответов

Просматривая список рассылки Moq, я думаю, что нашел ответ:

Обсуждение Moq

Кажется, что я столкнулся с ограничением платформы Moq.

Редактирование, я нашел другой способ протестировать выражение:

http://blog.stevehorn.cc/2008/11/testing-expressions-with-moq.html

1
ответ дан 3 November 2019 в 08:21
поделиться

Попробуйте это

 _repository.Expect(f => f.FindAll(It.Is<SomeType>(t => t.STATUS_CD == "A")))

Простой способ проверить ошибки состоит в том, чтобы удостовериться в конце ожидать вызова, который Вы всегда имеете три').

0
ответ дан 3 November 2019 в 08:21
поделиться

В Насмешках Носорога Вы сделали бы что-то вроде этого...

Вместо того, чтобы использовать Ожидание, используйте Тупик и Проигнорируйте аргументы. Затем имейте-

Func<JSOFile, bool> _myDelegate;

_repository.Stub(f => FindAll(null)).IgnoreArguments()
   .Do( (Func<Func<JSOFile, bool>, IEnumerable<JSOFile>>) (del => { _myDelegate = del; return new List<JSOFile>();});

Назовите реальный код

*Установите поддельный объект JSOFile с набором STATUS_CD к "A" *

Assert.IsTrue(_myDelegate.Invoke(fakeJSO));
0
ответ дан 3 November 2019 в 08:21
поделиться

Если Вы хотите протестировать корректный параметр, передается, Вы могли бы всегда "злоупотреблять" оператором возвратов:

bool correctParamters = верный;

_repository. Ожидайте (f => f. FindAll (Это. IsAny> ()))

.Returns ((Func func) => {correctParamters = func (fakeJSOFile); возвратите новый Список-SOFile-();})

.AtMostOnce ()

.Verifiable ();

Утверждать. IsTrue (correctParamters);

Это вызовет функцию, переданную в с аргументами, которые Вы хотите.

0
ответ дан 3 November 2019 в 08:21
поделиться

This is a bit of a cheaty way. I do a .ToString() on the expressions and compare them. This means you have to write the lambda the same way in the class under test. If you wanted, you could do some parsing at this point

    [Test]
    public void MoqTests()
    {
        var mockedRepo = new Mock<IRepository<Meeting>>();
        mockedRepo.Setup(r => r.FindWhere(MatchLambda<Meeting>(m => m.ID == 500))).Returns(new List<Meeting>());
        Assert.IsNull(mockedRepo.Object.FindWhere(m => m.ID == 400));
        Assert.AreEqual(0, mockedRepo.Object.FindWhere(m => m.ID == 500).Count);
    }

    //I broke this out into a helper as its a bit ugly
    Expression<Func<Meeting, bool>> MatchLambda<T>(Expression<Func<Meeting, bool>> exp)
    {
        return It.Is<Expression<Func<Meeting, bool>>>(e => e.ToString() == exp.ToString());
    }
2
ответ дан 3 November 2019 в 08:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: