惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
The GitHub Blog
The GitHub Blog
F
Fortinet All Blogs
Cloudbric
Cloudbric
P
Palo Alto Networks Blog
T
Threatpost
T
Tor Project blog
T
Tenable Blog
AWS News Blog
AWS News Blog
Project Zero
Project Zero
L
LangChain Blog
Cyberwarzone
Cyberwarzone
Engineering at Meta
Engineering at Meta
雷峰网
雷峰网
C
CERT Recently Published Vulnerability Notes
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Security Latest
Security Latest
云风的 BLOG
云风的 BLOG
I
Intezer
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
P
Proofpoint News Feed
A
Arctic Wolf
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Google DeepMind News
Google DeepMind News
V
Vulnerabilities – Threatpost
C
Cybersecurity and Infrastructure Security Agency CISA
MongoDB | Blog
MongoDB | Blog
aimingoo的专栏
aimingoo的专栏
K
Kaspersky official blog
Jina AI
Jina AI
N
News | PayPal Newsroom
T
The Blog of Author Tim Ferriss
D
DataBreaches.Net
A
About on SuperTechFans
博客园 - 三生石上(FineUI控件)
博客园 - 【当耐特】
Hugging Face - Blog
Hugging Face - Blog
Recorded Future
Recorded Future
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
S
Secure Thoughts
TaoSecurity Blog
TaoSecurity Blog
P
Privacy & Cybersecurity Law Blog
P
Proofpoint News Feed
MyScale Blog
MyScale Blog
IT之家
IT之家
Forbes - Security
Forbes - Security
The Hacker News
The Hacker News
Last Week in AI
Last Week in AI
T
Threat Research - Cisco Blogs
Y
Y Combinator Blog

博客园 - 数码幽灵

[转贴] 网络硬盘“G宝盘”使用体验 - 数码幽灵 - 博客园 个人拼图 有关Web项目使用EnterpriseLibrary的Sercurity问题 - 数码幽灵 - 博客园 关于使用VS.Net2003调试器出现的问题及相关解决方法 关于JavaScript一次提交多个Form出现的问题 看到关于Zope的一些东西 关于SmartClient 与 游戏开发的一点想法 关于Alex 的 ProcessContext 今天看到AppForge的产品 Base4.Net 即将推出 V1.0 WS-Security学习 使用Base4.Net进行项目开发中的问题 发现了C-Omega Essential ASP.NET 读书笔记--Configuration Essential ASP.NET 读书笔记--WebForm Essential ASP.NET 读书笔记--基础 Visual Studio 2005 Express Download Test Driven C# 读书笔记(下) 每个.Net开发者现在应该下载的十个必备工具!
Test Driven C# 读书笔记(上)
数码幽灵 · 2004-06-26 · via 博客园 - 数码幽灵

测试驱动开发允许你在更好的了解问题之前不做出任何决定;在具备足够的关于产品将如何被开发的知识

之前,你不需要提出一个完美的架构;

一个最简单的测试:
所谓实践出真知,现在来做一个做简单的例子;我们不使用任何特殊的工具;
一个计算矩形面积和周长的程序:

public class Quad
 {
     public int Area(int length, int width)
     {
         return 0;
     }
 }

static void Main(string[] args)
 {
     Quad q = new Quad();
     System.Diagnostics.Debug.Assert(q.Area(3,2) == 6);
 }

执行程序,发生“断言失败”的错误,很明显,因为q.Area(3,2)!=6;
接下来硬编码,使q.Area(3,2)==6;
public class Quad
 {
     public int Area(int length, int width)
     {
         return 0;
     }
 }
再次运行,没有任何问题,一切正常;
接下来,重构测试程序:
public class Quad
 {
  private int m_length;
  private int m_width;

  public Quad( int length, int width)//初始化值
  {
   m_length = length;
   m_width = width;
  }
  public int Area()//计算面积
  {
   return m_length * m_width;
  }
  public int Perimeter()
  {
   return m_length*2+m_width*2;
  }

 }
static void Main(string[] args)
  {
   Quad q = new Quad(3,2);
   System.Diagnostics.Debug.Assert(q.Area() == 6);
   System.Diagnostics.Debug.Assert(q.Perimeter()==10);
  }

是的,没有发生任何异常;于是我们就用最简单的形式完成了一次演示TDD(测试驱动开发)的练习;接下

来是对于相关的每一步的摘要:
1.写下一个失败的测试:我们选择了一个看起来最容易实现的测试进行编码;接下来我们写了一个计算矩

形面积的最简单的实现以便编译它,尽管当我们执行程序的时候它发生了中断因为面积并不等于6;
2.修改代码通过测试:修改代码的过程中,我们用硬编码返回值6的方法完成了一个最简单的任务,目标仅

仅是让程序通过测试,接下来,我们使用了不同的参数强迫我们实现一个适当的算法来通过测试;
3.接下来我们重构了代码,使得程序更具有柔韧性,并且更易于理解;

关于TDD,注意到以下几点:
1.测试证明了代码,我们可以通过测试很清晰的看到Quad这个类究竟做了些什么;
2.我们可以通过测试来度量进度;每一个功能都被测试所证明;
3.测试能使每个人都对改变的代码充满自信,即使你是一个使用专家编写的类的C#菜鸟,执行所有测试能

保证你没有搞糟任何事情;
4.失误,正如传递长度与宽度数据给Area 和 Perimeter方法而不是构造函数一样,将在重构中被逐步纠

正;
5.当你在现实世界中使用TDD的时候,你会生成大量的测试,所以你需要使用像NUnit这样的工具组织你的

测试;

使用Nunit进行你的自动化测试:
在成百上千个测试的海洋中,小组成员将频繁经历“编写测试,修改代码,重构”这样的周期;本质就是

你可以很有效率的编写和运行测试;Nunit这样的框架就是设计来帮助你做这些事情的