2009-06-04 3 views
1

Я новичок в насмешках, поэтому мне нужно немного узнать, как насмехаться с HttpPostedFileBase с Rhino Mocks. Я пытаюсь проверить, что мой ToByteArray() расширение работает, как ожидалось, и это то, что я до сих пор:Mocking HttpPostedFileBase с Rhino Mocks

[Test] 
    public void Should_return_a_byte_array_with_a_length_of_eleven() 
    { 
     // Arrange 
     var stream = new MemoryStream(System.Text.Encoding.Default.GetBytes("TestContent")); 
     var httpPostedFileBase = MockRepository.GenerateMock<HttpPostedFileBase>(); 

     httpPostedFileBase.Expect(x => x.InputStream).Return(stream); 
     httpPostedFileBase.Expect(x => x.ContentLength).Return(11); 

     // Act 
     var byteArray = httpPostedFileBase.ToByteArray(); 

     // Assert 
     Assert.That(byteArray.Length, Is.EqualTo(11)); 
    } 

Я могу сказать, что значения приготовьтесь, но к тому времени, мой метод расширения получает HttpPostedFileBase он потерял все это ценности. Любая помощь приветствуется.

/Кристоффер

ответ

2

Всякий раз, когда это возможно, следует избегать издевается для того, чтобы убедиться, что реализация того, что вы ожидаете. Вместо этого, пользуйтесь проверкой того, что для какого-то конкретного ввода результат - это то, что вы ожидаете.

Тем не менее, на вашем примере отсутствует несколько ключевых вещей. При использовании издевается, вы должны сказать им, когда вы закончите настройки ожидания (в противном случае они будут записывать все вызовы методов и тому подобное, как дальнейшие ожидания) по телефону:

httpPostedFileBase.Replay(); 

И, наконец, на стадии утверждают, подтвердите свои ожидания:

httpPostedFileBase.VerifyAllExpectations(); 

Также обратите внимание, что с помощью Rhino вы можете только имитировать методы и свойства, которые являются виртуальными.

+0

Спасибо за ваш ответ! Я пробовал это, но я все еще получаю «Ожидаемое: 11 Но было: 0». Я помещаю Replay(), прежде чем я вызову ToByteArray() и VerifyAllExpectations() после ToByteArray(). Я слышал ваш аргумент насчет насмешек, но я не уверен, что я понял, как я могу проверить это по-другому. Как бы вы это сделали? –

+0

Я получил ваши предложения, работая после установки Repeat.Any() на мои ожидания. Однако меня все еще интересует, как вы могли бы сделать это по-другому !? –

+0

Если вы можете создать фактический экземпляр HttpPostedFile (или некоторый вывод HttpPostedFileBase) с некоторым тестовым контентом, вы можете просто вызвать метод расширения. Но я не знаю класс HttpPostedFile достаточно хорошо, чтобы быть на 100% уверенным, что это возможно. – Rytmis