2014-12-04 2 views
0

Я застреваю в ситуации, в которой я создаю тестовый проект в ASP.Net MVC, здесь я тестирую метод, который на самом деле используется для загрузки файла , поэтому всякий раз, когда я пытаюсь проверить этот метод даетResponse.BinaryWrite() в ASP.Net MVC Test Project

OutputStream не доступен, когда обычай TextWriter используется

Ошибка в Response.BinaryWrite(), все нормально, кроме этого, может кто-нибудь сказать мне, как разрешить это исключение, я использую MOQ dll для Mocking, пожалуйста sugge чтобы избавиться от этой ситуации.

HttpContext.Current.Response.BinaryWrite() 

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

Спасибо.

+0

Если вы не издеваетесь над вашим HttpContext, то HttpContext.Current будет иметь значение null в тестовом проекте, а тем более объект ответа –

+0

Я стараюсь избегать насмешек над такими библиотеками, как HttpContext. Издевательство над этими библиотеками, как правило, не стоит усилий ИМО. Если проблема HttpContext является проблемой, вы можете извлечь свой код в методе и модульном тесте. – heymega

ответ

1

Если вы пишете модульный тест, вы, как правило, не хотите писать тест, у которого есть зависимости, которые вы не можете контролировать (например, запись в базу данных, файловую систему или выходной поток). Вы также можете предположить, что Response.BinaryWrite делает то, что он должен.

Вы можете сделать что-то подобное, чтобы обойти ошибку, которую вы видите.

public interface IBinaryWriter 
{ 
    void BinaryWrite(byte[] buffer); 
} 

public class ResponseBinaryWriteWrapper : IBinaryWriter 
{ 
    public void BinaryWrite(byte[] buffer) 
    { 
    HttpContext.Current.Response.BinaryWrite(buffer);  
    } 
} 

Это даст вам возможность впрыскивать IBinaryWriter в класс, который вы хотите проверить как макет, а затем вы можете проверить, что BinaryWrite вызывается с правильным массивом байтов. В своем производственном коде вы затем вводите свой конкретный класс ResponseBinaryWriterWrapper.

+0

Хмм, Спасибо, Андрей, ваши звуки нравятся, вы меня трогаете, чтобы использовать инъекцию зависимостей, теперь я уверен, что это поможет мне, Я попробую it.any пути спасибо за ваш ответ. –

Смежные вопросы