单元测试 – 单元测试 – 不能从理论转向实践
似乎我遇到的每个单元测试示例都非常明显和罐装.像断言x 3 == 8等等.我只是很难看到我如何单元测试现实世界的东西,比如SQL查询,或者用于表单验证的regEx实际上是否正常工作.
例证:我正在开发两个由DB驱动的ASP.NET MVC 2站点.我为每个人都有一个测试单元解决方案,但不知道哪种测试会有用.该站点将完成的大部分工作是向数据库写入数据,或从数据库中检索和组织数据.我只是测试各种查询是否成功访问了数据库?我如何测试正确性(例如,数据被写入正确的字段,或正确检索的数据)? 我只是很难将我自己的非正式测试和调试方式转换为更正式的断言(x)类测试. 解决方法
首先,问问自己“为什么单元测试难以为我的真实代码编写?”也许答案是你的真实代码做得太多了.如果你有一个代码模块充满了“新”语句和“if”语句和“switch”语句以及聪明的数学语句和数据库访问,那么编写一个测试会很痛苦,更不用说充分测试逻辑了数学.但是如果你将“新”语句拉出到工厂方法中,你可以轻松地提供模拟对象来进行测试.如果将“if”子句和“switch”语句拉出到状态机模式中,则不会有这么多组合进行测试.如果删除对外部数据提供程序对象的数据库访问权限,则可以提供简单的测试数据来执行数学语句.现在,您正在测试对象创建,状态转换和数据访问,这些都与您聪明的数学语句分开.通过简化它们,所有这些步骤都变得更容易了.
代码难以测试的一个关键原因是它包含“内部依赖关系”,例如它创建的依赖关系或对库的依赖关系.如果你的代码说“Foo theFoo = new Foo();”你不能轻易用MockFoo代替测试.但是如果你的构造函数或方法要求传入theFoo而不是构造它自己,你的测试工具可以很容易地传入MockFoo. 编写代码时,请问自己“如何为此代码编写单元测试?”如果答案是“很难”,您可以考虑更改代码以使其更容易测试.这样做是因为它使您的单元测试代码的第一个实际消费者 – 您通过编写测试来测试代码的接口. 通过改变界面使其更易于测试,您将发现自己更好地遵循“紧密内聚”和“松散耦合”的面向对象原则. 单元测试不仅仅与测试有关.编写单元测试实际上改善了您的设计走得更远一点,你最终得到了测试驱动开发. 祝好运! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 处理ASP.NET MVC中日期的最佳方法 – Javascript应用程序
- asp.net-mvc-3 – OutputCache属性和jQuery Ajax没有缓存
- ASP.net ViewState – 即使在禁用时,也存在一些视图状态.为
- asp.net-mvc – Visual Studio 2013无法打开Razor视图 – ‘
- asp.net-web-api – 认证/授权MVC 5和Web API – Katana /
- 我可以在.NET中设置IIS MIME类型吗?
- asp.net-web-api – 在asp.net web api中将HL7 FHIR序列化到
- asp.net-core – 用于Core的DocumentDB TransientFaultHand
- asp.net会员 – 自动生成的密钥不支持散列或加密的密码
- asp.net-mvc – MVC 3.0编辑可变长度列表并使用PRG模式
- asp.net – WebAPI编码cookie值
- asp.net-core-2.1 – 配置HttpClientFactory以使
- asp.net – 缓存http处理程序.ashx输出
- asp.net-mvc-2 – 为MVC2 AsyncControllers构建单
- asp.net-web-api2 – Swashbuckle 5和multipart
- 如何刷新#include文件 – 它们在IIS7 / ASP.NET上
- 使用 MiniProfiler 来分析 ASP.NET Core 应用
- ASP.NET OutputCache和Cookies
- asp.net-mvc – Razor – @ Html.Raw()仍在编码&
- .net – 在Razor ViewEngine中显示错误