`
techno_it
  • 浏览: 54525 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多

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敬请关注。

 

 

 

 

 

 

  • 描述: 项目结构图
  • 大小: 19.6 KB
  • 大小: 13.6 KB
分享到:
评论

相关推荐

    Django搭建的毕业设计管理系统,TDD开发模式.zip

    7. `tests/`:存放测试用例,体现了TDD开发模式。 8. `static/` 和 `templates/`:分别存储静态资源(如CSS、JavaScript)和HTML模板。 通过这个系统,可以有效提升毕业设计管理的效率,降低沟通成本,同时TDD的...

    tdd-ebook, 测试驱动开发广泛教程 .zip

    tdd-ebook, 测试驱动开发广泛教程 开源电子书 图书下载链接书二进制文件和在线版本在Leanpub上。 这本书是( 而且总是) 免费的。 Epub 移动 PDF HTML你需要有一个关于leanpub的帐户来访问坩和,格式,但是pdf和html...

    TDD测试驱动开发

    TDD遵循红-绿-重构三步走的模式: - **红**:首先编写一个失败的测试用例,确保测试框架运行正常,并且当前功能尚未实现。 - **绿**:接着编写最简化的代码,使测试用例通过。这里的目的是使测试从红色(失败)...

    TDD 测试驱动开发 文档 详细

    7. TDD的挑战与陷阱:讨论可能遇到的问题,如过度测试、测试驱动的反模式,以及如何避免它们。 总之,这个压缩包提供了一套全面的TDD学习资源,适合Java开发者深入理解和实践测试驱动的开发方式。通过系统学习并...

    TDD读书报告

    - **软件开发挑战**: 传统软件开发模式中存在的问题,如开发周期长、代码质量难以保证等,促进了新的开发方法论的出现。 - **高效开发的需求**: 高效的软件开发过程对于软件团队至关重要,TDD作为一种提供快速反馈和...

    测试驱动开发TDD(1-3)

    总结来说,测试驱动开发TDD是一种以测试为指导的开发模式,它通过编写测试来驱动功能代码的实现,强调代码的可测试性、可读性和可维护性。在实际应用中,TDD能够帮助开发者发现设计上的问题,提前预防错误,并提高...

    创建你自己的angularjs

    通过使用TDD开发模式,开发者可以学习如何编写单元测试,如使用Jasmine和Karma等测试框架,从而在保证代码质量的同时提高开发效率。 在JavaScript编程方面,创建AngularJS框架可以加深对JavaScript语言的理解,包括...

    Donet学习路线图

    - 学习编写测试用例,使用NUnit、xUnit或MSTest框架,实践TDD开发模式。 12. **源码控制**: - 熟悉Git,理解版本控制的基本概念和协作流程。 13. **设计模式**: - 学习常见的设计模式,如工厂模式、单例模式...

    CppUnit测试框架入门

    它适用于任何需要进行单元测试的C++项目,尤其是采用TDD开发模式的项目。 总结,CppUnit是C++开发者进行单元测试的重要工具,通过它可以有效地保证代码质量,提升软件的可靠性和可维护性。理解并熟练运用CppUnit,...

    测试驱动编程 TDD 实例

    测试驱动开发(Test-Driven Development,简称TDD)是一种软件开发方法,它的核心思想是“先写测试,再写代码”。TDD强调在编写实际功能代码之前,先编写能够失败的单元测试,确保测试覆盖了预期的功能需求。这种...

    Spring in action中文版(第4版)

    5. 测试驱动开发(Test Driven Development,TDD):Spring支持TDD开发模式,鼓励开发者编写测试用例,然后编写足够的代码以使测试通过。这样可以保证代码的质量,也能让开发者对代码的改变更有信心。 6. 依赖管理...

    测试驱动开发(TDD)

    总结来说,测试驱动开发是一种强调先写测试后写代码的开发模式,它通过测试来驱动和指导软件的设计与实现,从而提高代码质量,降低风险,并促进良好的软件设计。虽然在实施TDD时需要投入额外的时间和精力,但它在...

    Google Test框架静态库,环境为Window平台X64

    - Google Test鼓励采用TDD开发模式,先编写测试,再实现功能,确保代码功能正确。 8. **测试覆盖率**: - 在Windows x64环境下,可以使用如Visual Studio的内置工具或其他第三方工具(如gcov、llvm-cov)来计算...

    ASP.NET+3.5+MVC+架构与实战源代码-第一部分体验篇

    11. **单元测试和TDD(Test-Driven Development)**:使用Moq或NUnit等工具进行MVC应用的单元测试,实践TDD开发模式。 12. **AJAX集成**:学习如何在MVC中使用jQuery或其他库实现异步交互,提升用户体验。 13. **...

    MVC3安装包

    6. **测试驱动开发(TDD)友好**:MVC3鼓励采用TDD开发模式,通过模拟对象和测试助手类,编写单元测试变得更加容易。 7. **增强的UI验证**:引入了客户端验证功能,可以在浏览器端进行数据验证,减少服务器端的压力...

    工程与技术实践-TDD中常见的10大反模式

    ### 工程与技术实践-TDD中常见的...在实践中避免这些反模式可以帮助开发团队更好地利用TDD的优势,提高软件产品的整体质量。值得注意的是,虽然这里列举了一些典型的反模式,但具体情况还需结合项目实际情况灵活处理。

    tdd测试驱动在软件工程中的辩证思考-软件工程-工程.pdf

    软件工程中,TDD 测试驱动开发模式是一种重要的开发方法论。该模式自上世纪九十年代中后期开始流行以来,一直在争论中前进发展。TDD 模式的优点在于可以提升代码的质量,要求需求和开发的一致,保证了简洁高效的类、...

Global site tag (gtag.js) - Google Analytics