• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

软件测试中的一种新单元测试的方法

发布: 2009-11-03 15:53 | 作者: 网络转载 | 来源: 领测软件测试网 | 查看: 52次 | 进入软件测试论坛讨论

领测软件测试网

Java代码

  1. public interface APIInterface {
  2. @TestedBy( testClass = "it.javalinux.testedby.APITest", testMethod = "shouldAddTwoAndThree" )
  3.
public int add(int a, int b);
  4. }
  5.
  6.
public class APIImplOne {
  7.
public int add(int a, int b) {
  8.
return a + b;
  9. }
  10.
  11.
public class APIImplTwo {
  12.
public int add(int a, int b) {
  13.
return a - b;
  14. }
  15.
  16.
public class APITest {
  17.
  18.
private APIInterface instance;
  19.
  20. @BeforeTestedBy
  21.
public beforeTestedBy(APIInterface instance) {
  22.
this.instance = instance;
  23. }
  24.
  25.
public void shouldAddTwoAndThree() {
  26. assertThat(instance.add(3,2), is(5));
  27. }
  28.
  29. }

当然,我使例子尽量简单,但是TestedBy有更多的注释,比如当没有参数的构造函数的简单反射调用时,被测试类的实例工厂能被指定,这些注释还远远不够。

2、在当前工作的类上运行测试

你写一个测试类来检验代码的正确性。很多时候,你写单元测试来保证代码的改变不会影响正在工作的代码,或者其他同事正在用的代码。你如何做呢?你可能改变你的代码,然后跑所有的涉及到修改的类的测试类。然后,最后你跑所有的测试来保证你没有影响到其他代码。

那么让你的IDE第一步做什么呢?它编译你修改的类,并同时运行对应的测试类?既然你或者你的IDE能够运行测试类,testedBy让这个成为可能。一个eclipse插件就能做这些工作,针对你修改的类来运行相应的测试类,以验证没有破坏你的测试集,不仅仅是在编译阶段,也能在你写代码的时候。而且这个也不会太费时,因为插件能够根据TestedBy的注释来只运行很少的测试类,即那些已经修改过的类/方法对应的测试类。

而且,运行测试类,能够得到一些清楚的报告比如:

Java代码

1. "ClassUnderTest.methodUnderTest shouldThrowExceptionWithNullParameter doen't pass"

或者更好的:

Java代码

1. "Failure: methodUnderTest in ClassUnderTest doesn't throw exception with null parameter, but it should!"

当然,你能够拒绝这种针对类/方法名称 (如果你想的话)提供的便利,自己从整个工程中去找那些测试类,根据需要自己来测试。

当然针对所有的类来运行所有的测试类也是可能的,你的测试也能够在Junit上运行,因为TestedBy是基于Junit测试的。

一些特点

让我列举在我心中TestedBy的特点吧:

1、第一个可能是最没有价值的,但是也是最有用的:在你的IDE中,你能够导航你的源代码到对应的测试代码。这个特性将在eclipse4.4的时候发布,它能够根据类名称导航,即使类名处在一个字符串中。当然,这只是一个开始,一个专门的eclipse插件将被开发用来导航代码,以及被测试代码的测试代码树形结构,针对打开/修改的类(见第3点)执行测试代码,等等。我不是一个eclipse开发的大师,因此非常欢迎哪位能够在这方面做出贡献。

2、你将在你的java文档中找到这些注释,考虑这是一个多好的事情,如果你使用BDD方式开发,定义测试方法形如 shouldNotAcceptNull()或者shouldThrowsExceptionIfEmpty等等。使用BDD方法,事实上你能够定义和检查约束,通过使用TestedBy的注释,在JavaDoc文档中把这些展示给你的API用户。

3、你能够从被测试类开始运行测试,而不是测试类。我在之前就说过这些了。

4、通过接口和约束的设计。我已经在上文中专门介绍了这些。

5、测试类自动生成。一个工具(ant,maven,或者eclipse工具)能用我们的TestedBy注释来生成测试类。见6点。

6、Ant /maven 任务/插件来从被测试类运行测试,这个工具将管理并平稳的使用(用来保证测试类和注释间的同步将很重要):

A. 反转引擎:从存在的测试类开始,添加TestedBy注释到被测试类中。

B. 从TestedBy注释中开始运行测试类,来验证他们能运行所有的测试,并且没有注释指向不存在的测试。

C. 从注释开始生成(空的)测试类和方法。

当然,这还不够,但是,我想这能给你一个想法。我现在正在做这些想法背后的事情,但是我需要在把他们呈现给社区之前把它们设计得更好。

Conclusions总结

你对这个方法有兴趣吗?让我知道你的想法,并且跟你的朋友分享这个帖子…我能从这个帖子得到越多的反馈,我就能更好的做好它。

现在问题是..目前这个项目的状态是什么?

你可以看一下project homepage on javalinuxlabs. googlecode 上面,你可以在svn下面找到一些类。这不是这个工程的第一次实现…它差不多是这个想法的证明。但是,我们需要更努力的工作来让它更快的派上用场。

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/

22/2<12

关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网