У меня есть метод. которые извлекают документ с жесткого диска. Я не могу проверить это на модульном тестировании. Он всегда выдает исключение недействительным пустым путём или чем-то еще. Как проверить это. Я временно создал сеанс для модульного теста. Но я не могу для этого Server.MapPath. Как это сделать ?Тестирование модуля для Server.MapPath
ответ
Вы можете использовать инъекции зависимостях и абстракцию над Server.MapPath
public interface IPathProvider
{
string MapPath(string path);
}
и реализация производства будет:
public class ServerPathProvider : IPathProvider
{
public string MapPath(string path)
{
return HttpContext.Current.Server.MapPath(path);
}
}
Во время тестирования один:
public class TestPathProvider : IPathProvider
{
public string MapPath(string path)
{
return Path.Combine(@"C:\project\",path);
}
}
* cough * Path.Combine вместо + –
Действительно, спасибо, что указали это.Код изменен –
Спасибо, очень хороший совет. –
Если вам нужно проверьте устаревший код, который вы не можете или не хотите изменять, вы можете попробовать FakeHttpContext.
Вот как это работает:
var expectedPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "path");
using (new FakeHttpContext())
{
var mappedPath = Http.Context.Current.Server.MapPath("path");
Assert.Equal(expectedPath, mappedPath);
}
Хотя эта ссылка может ответить на вопрос, лучше включить здесь основные части ответа и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. - [Из обзора] (/ review/low-quality-posts/11017158) – MikkaRin
Спасибо, я обновил ответ, как вы рекомендовали. – vAD
Как можно установить базовый MapPath * с помощью FakeHttpContext? – Hannobo
- 1. Server.MapPath ("."), Server.MapPath ("~"), Server.MapPath (@ "\"), Server.MapPath ("/"). В чем разница?
- 2. Server.MapPath()
- 3. Тестирование модуля ядра для Android
- 4. Тестирование модуля для встроенной системы
- 5. Тестирование модуля для JS-данных
- 6. Эффективное тестирование модуля для Javacc
- 7. Тестирование модуля для вызова отдыха
- 8. Тестирование модуля iOS
- 9. Тестирование модуля Android
- 10. Тестирование модуля усиления Qt
- 11. Тестирование модуля WCF
- 12. Тестирование модуля ядра
- 13. Тестирование модуля компонента Swing
- 14. Тестирование модуля методом псевдонима
- 15. WP7 - Тестирование модуля ViewModel
- 16. Тестирование модуля Локальные уведомления
- 17. web2py - Тестирование модуля @ auth.requires_login()
- 18. Тестирование модуля Viewmodel
- 19. Тестирование модуля в JavaScript
- 20. тестирование модуля плагинов cordova
- 21. Тестирование модуля класса фасада
- 22. Тестирование удаленного модуля C++
- 23. Тестирование модуля ASP.NET
- 24. Guice: тестирование модуля
- 25. Тестирование модуля CXF
- 26. Тестирование модуля DbContext
- 27. Тестирование модуля OnResultExecuted
- 28. Тестирование модуля в XCode
- 29. Тестирование модуля - теорема
- 30. Тестирование модуля черного ящика
Вам нужно издеваться объект сервера, [этот вопрос] (http://stackoverflow.com/questions/17332219/mock-server-in-a -controller) говорит об этом, хотя это для MVC, вы все равно должны использовать одну и ту же логику. – Liam
Вы не можете. Статику довольно сложно насмехаться. Подумайте об изменении исходного кода, которому требуется значение Server.MapPath, чтобы принять делегат Action, который инкапсулирует Server.MapPath. Тогда в ваших тестах вы можете издеваться над этим. –
Да, как @MarvinSmit говорит, вам нужно перейти к шаблону инъекции зависимостей, чтобы достичь этого – Liam