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

推荐订阅源

WordPress大学
WordPress大学
Microsoft Security Blog
Microsoft Security Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
V
Visual Studio Blog
宝玉的分享
宝玉的分享
IT之家
IT之家
人人都是产品经理
人人都是产品经理
T
The Blog of Author Tim Ferriss
I
InfoQ
B
Blog RSS Feed
T
Threatpost
博客园_首页
M
MIT News - Artificial intelligence
Spread Privacy
Spread Privacy
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Know Your Adversary
Know Your Adversary
U
Unit 42
Engineering at Meta
Engineering at Meta
C
Cyber Attacks, Cyber Crime and Cyber Security
月光博客
月光博客
Scott Helme
Scott Helme
T
Tor Project blog
有赞技术团队
有赞技术团队
AWS News Blog
AWS News Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Last Week in AI
Last Week in AI
S
Schneier on Security
Vercel News
Vercel News
博客园 - Franky
C
Cybersecurity and Infrastructure Security Agency CISA
L
LINUX DO - 热门话题
NISL@THU
NISL@THU
L
LangChain Blog
爱范儿
爱范儿
Google DeepMind News
Google DeepMind News
The GitHub Blog
The GitHub Blog
雷峰网
雷峰网
Latest news
Latest news
C
CXSECURITY Database RSS Feed - CXSecurity.com
Hugging Face - Blog
Hugging Face - Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
www.infosecurity-magazine.com
www.infosecurity-magazine.com
G
GRAHAM CLULEY
S
Security Affairs
A
About on SuperTechFans
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
大猫的无限游戏
大猫的无限游戏
W
WeLiveSecurity
Cisco Talos Blog
Cisco Talos 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 博客园 - 数码幽灵

Nunit各种不同的Setup和TearDown标记来帮助我们频繁的建立一致的测试环境,这种功能能帮助您确保一

个测试用例不会对其他任何一个测试用例产生作用(测试用例隔离-Test case isolation),而证明测试

用例隔离的最好例子就是以任何顺序执行您的测试

Nunit的Test Fixture是用来被一个或更多测试用例共享的用来初始化对象或是提供一些相关资源的装置

;按照Nunit的规定,一个Test Fixture就是一个标记了[TestFixture]属性的类,他的方法提供:
  [Test]标记一个测试用例,这个测试用例将作为一个原子操作而不依赖于其他的测试;
  [SetUp]和[TearDown]用来在测试用例间重置测试环境,在每个测试的开始和结束的时候,拥有这两个 

  标记的方法将被执行
  [TestFixtureSetup]和[TestFixtureTearDown]提供测试用例间需要共享的某些对象;标记了这两个属 

性的方法将在每个test fixture开始和结束的时候被执行;

任何一个在运行时你需要的对象都可以被作为一个[TestFixture]类的实例变量(被所有测试用例共享)或

是一个方法的本地变量(对于个别的测试用例可见),这就是为什么它被描述为test fixture的原因;也可

以认为Nunit的[TestFixture]是将一组测试表现为一个类的形式的一种方法;

现实世界中的TDD
两个问题:
1.在产品开发中贯穿的测试需要在发布时很容易的去掉测试模块部分
2.对于一个鼠标键盘驱动的GUI应用,你如何编写一个测试来模拟用户的操作?

问题的解决办法在于适当的将代码拆分为可以被分开编译,测试,和部署的独立模块;一个例子就是将

Quad类编译为一个分离的库文件.dll的方案优于将它编译为一个和执行代码混合的可执行的程序,因为这

将是我们可以独立的同时开发测试程序和域程序(domain program)作为分离的可执行文件使用共享的包含

Quad的类库.dll
TDD的一个规则是,无须测试第三方代码,所以我们没有必要去测试gui框架的类,虽然有时候测试ui是有

用的;意思就是说,你可以捕捉用户时间并由你正在开发的类来处理它;

接下来看看使用TDD开发一个combobox list的简单的winform程序:

编译以下代码为库CountryLib.dll
public class CountryList
{
    public String GetCountry(int No)
    {
        return null;
    }
}
编写测试用例:
[TestFixture]
public class CountryBoxTest
{
    [Test]
    public void CheckContent()
    {
        CountryLib.CountryList list = new
            CountryLib.CountryList();
       
        Assert.AreEqual("UK", list.GetCountry(1));
        Assert.AreEqual("US", list.GetCountry(2));
        Assert.AreEqual("CH", list.GetCountry(3));
        Assert.AreEqual(null, list.GetCountry(4));
    }
}
很明显,测试将会失败,因为CountryList.GetCountry()返回null;
接下来重构代码,为GetCountry方法填充正确逻辑,如下:
public class CountryList
{
    string one = "UK";
    string two = "US";
    string three = "CH";

    public string GetCountry(int No)
    {
        if ( No == 1 )
            return one;
        if ( No == 2 )
            return two;
        if ( No == 3 )
            return three;
        else
            return null;
    }
}
测试通过,一切正常;可能你想把代码改的更好看一点,例如使用ArrayList存储字符串,但在这里,这

并不是重点;
接下来创建一个winform项目,在窗体上放置一个combobox,并在初始化中写下如下代码:
private void InitializeComponent()
{
    ...

    CountryLib.CountryList list = new CountryLib.CountryList();

    String country;
    int index = 1;

    while ((country = list.GetCountry(index++)) != null)
       this.comboBox1.Items.Add(country);

    ...

}

从这里我们可以看到,我们应该思考,CountryList类怎样参与用户界面的交互操作,对应编写我们的测

试用例;简而言之就是将表现层代码和逻辑代码充分剥离!这也是众多设计方法所提倡的;