TDD开发模式

TDD开发,可能国内用的人比较少。但我认为,这种开发模式是很值得引入的。首先,它不用程序员反复启动服务,就可以找到自己程序的问题,这样会提高开发效率(一般启动服务是一个痛苦的过程)。其次,这种方法比较灵活,程序的执行方向可以不按现实逻辑进行,这样我们就可以检测一些手动不便测试到的内容。最后,实现方法多种多样,简便宜行。

下面我来介绍一下我的方法。

在介绍之前,我先阐述一下我现在的应用环境:

我的Severlet:Tomcate

我的框架采用:Spring+Struts2.0+ibatis

我的单元测试采用框架是:Junit4还有一个国内可能应用不多的gienah testing

我的集成测试将采用框架是:Junit4和Ant。

我的黑盒测试将要采用的是:Junit4,Ant和selenium

下面先说一下单元测试:

我的程序目录是这样的:

项目结构

这种目录结构相信是比较经典的了。但是如果使用Junit进行单元测试,这个结构就有些笨拙。由于Spring的配置文件并没有在ClassPath中,所以,进行带有Spring的测试必须指明Spring配置文件的全路径。还有就是在Sping配置中包含的其它配置如ibatis的配置问题,这真的是很头疼。(我用了这个方法后找到了Spring的配置可在Spring中的配置一直找不到,目前我还不知如何解决。)还有一种就是大家常用的Ant,这个方法也是不错的,redface我还没有试过。我想给大家介绍的是我用的这种方法,与前两种不同,我的思路很简单,只是把WEB-INF设到了类路径中,我目前的目录结构如下:(。。没办法加不上图了。。。。)用这种方式还是有一定的问题,Spring的配置还是要略微修改一下。在我的Spring配置中只需要改成这样:

	<!-- ibatis配置管理 -->
	<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
		<property name="configLocation">
			<!-- value>WEB-INF/SqlMapconfig.xml</value-->
			<value>SqlMapconfig.xml</value>
		</property>
	</bean>

如果是集成测试时需要用注视部分替换现有部分。下面给出一个用 gienah testing写的测试类:

package test.web.Dao;


import java.util.Date;

import org.gienah.testing.junit.Configuration;
import org.gienah.testing.junit.Dependency;
import org.gienah.testing.junit.SpringRunner;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;

import test.web.Base.TestSpringBase;

import com.web.manage.JAdvert;
import com.web.manageDao.AdvertDao;
@RunWith(value=SpringRunner.class)
@Configuration(locations={"applicationContext.xml"})
public class TestAdvertDao extends TestSpringBase
{
	private JAdvert advertTest = new JAdvert();
	@Dependency
	private AdvertDao advertDao;
	@Before
	public void setUp() throws Exception
	{
		advertTest.setAdLocation(1);
		advertTest.setEntertime(new Date());
		advertTest.setImageID(1);
		advertTest.setUrl("1");
	}

	@After
	public void tearDown() throws Exception
	{
		advertTest = null;
		advertDao = null;
	}
	@Test
	public void testSave()
	{
		Assert.assertTrue(advertDao.insertAdvert(advertTest)>0);
	}
	@Test
	public void testDel()
	{
		advertDao.delAdvert(1);
	}
	@Test
	public void testGetBaseid()
	{
		JAdvert advert = advertDao.getAdvert(0);
		Assert.assertNull(advert);
	}
	@Test
	public void testUpdataAdvert()
	{
		JAdvert advert = advertDao.getAdvert(2);
		Assert.assertNotNull(advert);
		advert.setUrl("www.test.com");
		advertDao.updataAdvert(advert);
	}
}

上面的只是对单个的类测试实用,下面介绍一下集成测试。首先我们要建立一个测试基类,比如像如下代码

package test.web.Base;

import org.gienah.testing.junit.Configuration;
import org.gienah.testing.junit.SpringRunner;
import org.junit.runner.RunWith;

@RunWith(value=SpringRunner.class)
@Configuration(locations={"applicationContext.xml"})
public class TestSpringBase
{

}

之后,Test单个测试的类就改成如下形式(这里省略具体的细节,只说明主要的变化)

@RunWith(value=SpringRunner.class)
@Configuration(provider=TestSpringBase.class)
public class TestAdvertDao extends TestSpringBase

看到了吧。就是Configuration这发生了一点变化。变成这们的好处是,我们可以不用一个类加载一点Spring的配置了。对于我们做集成测试很有帮助。好了,现在我们可以将单个的测试类集成到我们的测试总类中了。

代码如下:

@RunWith(value=Suite.class)
@Suite.SuiteClasses({TestCompanyDao.class,TestAdvertDao.class,TestImageBridgeDao.class,TestImageDao.class,TestNewsDao.class,TestOperatoinDao.class,TestReportManDao.class,TestUserDao.class})
public class TestAllSuit
{
}

看很简单吧。这是我的测试Suite哈哈。这样这部分的工作就做完了。

 

这个测试类很有JUnit4的风格吧。用了gienah testing发现喜欢上它了,虽然Spring的新版本已经开始支持JUNIT4了,可我还是喜欢gienah testing的风格。这就叫萝卜白菜各有所爱吧。

 

先占个位置。下面会写黑盒测试,自动测试与Ant敬请关注。

 

 

 

 

 

 

测试驱动的编程是 XP 困扰程序员的一个方面。对于测试驱动的编程意味着什么以及如何去做,大多数人都做出了不正确的假设。这个月,XP 方面的讲师兼 Java 开发人员 Roy Miller 谈论了测试驱动的编程是什么,它为什么可以使程序员的生产力和质量发生巨大变化,以及编写测试的原理。请在与本文相随的 论坛中提出您就本文的想法,以飨笔者和其他读者。(您也可以单击本文顶部或底部的“讨论”来访问该论坛。) 最近 50 年来,测试一直被视为项目结束时要做的事。当然,可以在项目进行之中结合测试,测试通常并不是在 所有编码工作结束后才开始,而是一般在稍后阶段进行测试。然而,XP 的提倡者建议完全逆转这个模型。作为一名程序员,应该在编写代码 之前编写测试,然后只编写足以让测试通过的代码即可。这样做将有助于使您的系统尽可能的简单。 先编写测试 XP 涉及两种测试: 程序员测试和 客户测试。测试驱动的编程(也称为 测试为先编程)最常指第一种测试,至少我使用这个术语时是这样。测试驱动的编程是让 程序员测试(即单元测试 ― 重申一下,只是换用一个术语)决定您所编写的代码。这意味着您必须在编写代码之前进行测试。测试指出您 需要编写的代码,从而也 决定了您要编写的代码。您只需编写足够通过测试的代码即可 ― 不用多,也不用少。XP 规则很简单:如果不进行程序员测试,则您不知道要编写什么代码,所以您不会去编写任何代码。 测试驱动开发(TDD)是极限编程的重要特点,它以不断的测试推动代码的开发,既简化了代码,又保证了软件质量。本文从开发人员使用的角度,介绍了 TDD 优势、原理、过程、原则、测试技术、Tips 等方面。 背景 一个高效的软件开发过程对软件开发人员来说是至关重要的,决定着开发是痛苦的挣扎,还是不断进步的喜悦。国人对软件蓝领的不屑,对繁琐冗长的传统开发过程的不耐,使大多数开发人员无所适从。最近兴起的一些软件开发过程相关的技术,提供一些比较高效、实用的软件过程开发方法。其中比较基础、关键的一个技术就是测试驱动开发(Test-Driven Development)。虽然TDD光大于极限编程,但测试驱动开发完全可以单独应用。下面就从开发人员使用的角度进行介绍,使开发人员用最少的代价尽快理解、掌握、应用这种技术。下面分优势,原理,过程,原则,测试技术,Tips等方面进行讨论。 1. 优势 TDD的基本思路就是通过测试来推动整个开发的进行。而测试驱动开发技术并不只是单纯的测试工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值