.net – 如何使单元测试可以使用HttpContext?
发布时间:2020-12-15 21:02:31 所属栏目:asp.Net 来源:网络整理
导读:我想编写一个单元测试来测试一个名为UploadedFile的类的功能. 我面临的问题是这个类的静态构造函数使用HttpContext.Current属性,因为我从类库运行我的单元测试,我在测试时没有HttpContext. 看看我的静态构造函数: static UploadedFile(){ if (HttpContext.C
我想编写一个单元测试来测试一个名为UploadedFile的类的功能.
我面临的问题是这个类的静态构造函数使用HttpContext.Current属性,因为我从类库运行我的单元测试,我在测试时没有HttpContext. 看看我的静态构造函数: static UploadedFile() { if (HttpContext.Current == null) throw new Exception("web server not available"); HttpServerUtility server = HttpContext.Current.Server; // SET UploadedFileMappingFile Names: _resourceFileNames = new StringDictionary(); _resourceFileNames[_suppoertedFileStructures] = server.MapPath(SupportedUploadedFileStructures); _resourceFileNames[_supportedFileStructuresXSD] = server.MapPath(SupportedUploadedFileStructuresXSD); _resourceFileNames[UploadedFileEnum.UploadedFileFormatENUM.CSV.ToString()] = server.MapPath(UploadedFileColumnMap); } 我应该在我的测试环境中做什么,以便HttpContext.Current不会为null,我可以成功设置它: HttpServerUtility server = HttpContext.Current.Server; 解决方法
你不应该在你的函数中直接使用HttpContext.Current,因为你几乎不可能进行单元测试,正如你已经发现的那样.我建议你改用
HttpContextBase,它可以在你的类的构造函数中传递,也可以作为你正在测试的方法的参数传递.这将允许此类的消费者传递真正的
HttpContextWrapper,并且在您的单元测试中,您可以模拟您需要的方法.
例如,您可以调用该方法: var wrapper = new HttpContextWrapper(HttpContext.Current); Foo.UploadedFile(wrapper); 在您的单元测试中(使用Rhino Mocks): var contextMock = MockRepository.GenerateMock<HttpContextBase>(); // TODO: Define expectations on the mocked object Foo.UploadedFile(contextMock); 或者,如果您愿意,请使用Constructor Injection. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc – 将匿名对象从视图传递到部分视图
- Asp.net Core +MVC+Bootstrap开发项目实站2
- ASP.NET中的<%%>(嵌入式代码块)
- asp.net-mvc – 为什么ASP.NET MVC在从IE而不是firefox发布
- .net – WinInet如何确定缓存的内容和时间?
- 向ASP.NET Gridview添加动态列
- asp.net-mvc – ModelState.IsValid是假的 – 但是哪一个 –
- asp.net-mvc – 如何在Html.TextBox帮助器中设置一个css类?
- ASP.NET Core 2.0 Razor vs Angular/React/etc.
- asp.net-mvc – 使用存储库模式来支持多个提供程序
推荐文章
站长推荐
- asp.net-mvc – asp.net mvc:int值的千位分隔符
- asp.net-4.0 – Asp.net 4.0:如何在自定义错误页
- 如何在ASP.NET RadioButtonList中的项之间添加空
- asp.net – 在mvc网站中设置基本标记中的url路径
- asp.net-mvc – 使用ASP.NET Identity 2.0 UserM
- 如何在ASP.NET中使用多个授权方案发布相应的承载
- 从ASP.Net页面通过C#将NetworkCredential传递给H
- ASP.NET、.NET和C#的关系是怎样的?
- asp.net核心 – Asp.net核心错误管理
- .net – 为什么IHostedService是异步的
热点阅读