dbunitjava的简单介绍

博主:adminadmin 2022-11-21 17:00:18 68

今天给各位分享dbunitjava的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

怎样选择Java测试框架 JUnit还是TestNG?

TestNG仍然是我最喜欢的,而且它仍然保持更新。现在在开源的Java测试框架中仍然有新进者,easyb,一个基于Groovy行为驱动开发的测试工具,为Java和Groovy测试。通过编写合理的测试或是假定一个任务,它可以视为一种规范尽管它是可执行代码。如果你在Ruby世界中使用Rspec一样。 为什么JUnit仍然是首选——Aslam Khan像许多人开始测试驱动开发和单元测试一样,我也是从JUnit3.x起步的。我发现JUnit是最广泛的工具,出现在各种不同的地方(ANT,Maven,Eclipse,IntelliJ IDEA, 等)。它也很容易介绍给那些新团队。我也使用TestNG对它的多样性同样印象深刻。然而,JUnit的大量插件(dbUnit,xmlUnit等)使得Junit仍然是首选的。如果你花大量的时间在Spring上,那么基于Junit的Srping ApplicationContext aware测试用例会带来优势。为了测试前台,我几乎只使用Selenium.我曾经涉足过Canoo和其他的框架,但是发现这些途径都是反TDD模式的。使用Selenium,我可以处理Selenium测试脚本和记录,给任何需要的人并日后处理。 如果我们谈论的是纯粹的TDD,即书写良好的代码(不仅仅是良好的测试)需要增加一个mock测试。对于mocking,我使用Jmock,它和Junit配合良好,通过基于mock的方式和程序内部边界,我得到了设计良好的,互相通信的对象。这在可读性和可维护性上迈出了重要的一步。EasyMock也不错,但是Jmock是我个人的首选。 从Java世界上溯到Ruby世界中,RSpec很优秀而且也有DSL来描述场景。既然Rbehave已经融合进了Rspec,这样的整合将成为Ruby世界的首选。有趣的是,Rbehave是从Jbehave衍生来来,它是一个行为驱动开发测试框架。

dbunitjava的简单介绍

自动化测试java怎么锁定到新打开的窗口

一般的测试,尤其是逻辑处理代码的测试,JUnit就足够了。但是一些特殊的测试,譬如需要连接数据库, 使用浏览器,这些测试单单使用JUnit还不能够很好地完成任务,于是会偷懒的牛人又发明了DbUnit、HTTPUnit这些测试框架,使得重复劳动大大减少。

但是对于界面测试,到现在为止还没有一个框架能够使得界面测试完全地自动化起来。

根据马克思主义哲学原理,这是由事物的内因来决定的。由于界面的复杂性以及界面元素的不确定性,界面的测试只有在它实实在在地呈现在测试人员的眼里时,测试才能得出结果,接着测试才能继续下去。即使现在已经有了不少界面测试的框架,但是这些所谓的框架还是不能够称之为框架,只能称之为工具,因为使用这些工具仍然得做很多重复的工作,而且能够自动化测试的程度有限。

下文介绍的是进行界面测试的一种技术,或者说是一种方法,也或者说是一种思想。虽然我在前言部分声明不谈方法和思想,只谈技术,但在这里还是得谈一下方法和思想,实际上,在界面测试中,技术、思想、方法的概念是挺模糊的。相信不久的将来,当出现一个很牛的框架来进行界面测试时,这几个概念就会越来越清晰。

先来把被测界面代码写出来:

/************************************************************

 * 项目名称:lhjTest

 * 文件名称:CoolUiClass.java

 * 文件描述:CoolUiClass.java

 * 作者:Administrator

 * 创建日期:2007-3-24

 * 修改记录:

 ***********************************************************/

package org.lhj.cool.uiunit;

import java.awt.Dimension;

import java.awt.GridBagConstraints;

import java.awt.GridBagLayout;

import java.awt.Insets;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.JScrollPane;

import javax.swing.JTextArea;

/**

 * @author Administrator

 */

public class CoolUiClass extends JPanel

{

    private JTextArea msgTxt = new JTextArea(400, 320);

    

    private JButton coolBtn = new JButton("Cool");

    

    public CoolUiClass()

    {

        this.setLayout(new GridBagLayout());

        this.setMinimumSize(new Dimension(400, 350));

        this.setPreferredSize(new Dimension(400, 350));

        

        coolBtn.setMinimumSize(new Dimension(80, 21));

        coolBtn.setPreferredSize(new Dimension(80, 21));

        

        JScrollPane scrollPane = new JScrollPane(msgTxt);

        scrollPane.setMinimumSize(new Dimension(400, 320));

        scrollPane.setPreferredSize(new Dimension(400, 320));

        

        this.add(scrollPane, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 0, 0));

        this.add(coolBtn, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));

        

        coolBtn.addActionListener(new ActionListener()

        {

            public void actionPerformed(ActionEvent arg0)

            {

                appendText();

            }

            

        });

    }

    protected void appendText()

    {

        msgTxt.append("cool ");

    }

    /**

     * test the calss in main,use your eye to test.

     * @param args

     */

    public static void main(String[] args)

    {

        JFrame frm = new JFrame("CoolUiClass");

        frm.getContentPane().add(new CoolUiClass());

        frm.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        frm.pack();

        frm.setVisible(true);

    }

}

简单地运行以下main方法,界面如下:

这其实已经在测试界面了,我在main函数里头写的就是测试代码,对于界面显示的测试,就这几行代码就足够了。你这时候是不是觉得:这也忒容易了,没什么难度。但我得告诉你,这才是刚刚开始。

界面除了显示,更复杂的是要进行事件处理,每一个界面控件都有可能是事件源,一个事件得引起一系列的操作,而且是对于界面的操作。这就跟一般的函数的测试相差甚大了,一般来说,函数的测试就是输入一个参数,然后判断输出参数,输出参数无非就那几种情况,要么抛异常、要么返回空、要么返回具体值。而界面的事件处理一般会改变很多个控件的显示,而且控件处于不同的状态时改变的情况也不一定是一样的,所以要测试处理是否正确,得判断多个值,而且得根据控件之前的状态来判断当前显示是否正确。看到这,你似乎感觉无从下手了是吧。幸亏,界面测试有其方便性,我们可以直接拿眼睛判断界面上显示是否正确了,虽然这样的测试方法无法保证完全正确,但是却很高效。在界面测试中,拿眼睛进行判断比拿机器进行判断肯定效率要高的多。

如果紧紧是界面逻辑的测试,用眼睛来测(我称之为目测法)已经足够了,可以很高效地发现问题。但是如果界面上用到的数据是来自于其它地方(譬如说是后台),那么在main方法里还不能够写出完整的测试代码。这时候我们就需要一种方法来满足这种需求,其实下面的方法才是目测法的精髓:将与界面处理逻辑无关的代码抽出来,例如上面appendText(这里仅仅举个例子,appendText实际上包含了界面处理逻辑,实际上只需要把非界面处理逻辑代码抽出来,例如文件操作,访问后台,数据库操作这些情况就应该这样做)的形式,然后使用继承的方式,将非界面处理逻辑代码给替换成自己需要的数据(俗称假数据),这样一来,界面处理逻辑代码就可以得到很好的测试。见以下代码:

/************************************************************

 * Project Name: lhjTest

 * File Name   : CoolUiClassETest.java

 * File Desc   : CoolUiClassETest.java

 * Author      : Administrator

 * Create      : 2007-3-24

 * Modify:

 ***********************************************************/

package org.lhj.cool.uiunit;

import javax.swing.JFrame;

import org.lhj.cool.uiunit.CoolUiClass;

/**

 * @author Administrator

 */

public class CoolUiClassETest extends CoolUiClass

{

    /* (non-Javadoc)

     * @see org.lhj.cool.uiunit.CoolUiClass#appendText()

     */

    @Override

    protected void appendText()

    {

        // call the super method twice

        super.appendText();

        super.appendText();

    }

    /**

     * test the calss in main,use your eye to test.So this method calls Eye Test.

     * the eyt test method's idea is extends the test calss and overrride somemethod so 

     * that you can expect what you need.

     * @param args

     */

    public static void main(String[] args)

    {

        JFrame frm = new JFrame("CoolUiClassETest");

        frm.getContentPane().add(new CoolUiClassETest());

        frm.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        frm.pack();

        frm.setVisible(true);

    }

}

上面仅仅是个示例,实际的测试中要复杂得多,不过只要大家掌握了这个精髓,在编码就考虑这种测试,相信界面测试会成为一种乐趣。

java中完成一元稀疏多项式的基本运算

除以上功能外,还有乘法和除法的计算和导数计算呢。

这是我以前做的数据结构课程设计。希望能帮上你的忙。

#includestdio.h

#includemalloc.h

typedef struct Polynomial{

float coef;

int expn;

struct Polynomial *next;

}*Polyn,Polynomial; //Polyn为结点指针类型

void Insert(Polyn p,Polyn h){

if(p-coef==0) free(p); //系数为0的话释放结点

else{

Polyn q1,q2;

q1=h;q2=h-next;

while(q2p-expnq2-expn){ //查找插入位置

q1=q2;

q2=q2-next;

}

if(q2p-expn==q2-expn){ //将指数相同相合并

q2-coef+=p-coef;

free(p);

if(!q2-coef){ //系数为0的话释放结点

q1-next=q2-next;

free(q2);

}

}

else{ //指数为新时将结点插入

p-next=q2;

q1-next=p;

}

}

}//Insert

Polyn CreatePolyn(Polyn head,int m){//建立一个头指针为head、项数为m的一元多项式

int i;

Polyn p;

p=head=(Polyn)malloc(sizeof(struct Polynomial));

head-next=NULL;

for(i=0;im;i++){

p=(Polyn)malloc(sizeof(struct Polynomial));//建立新结点以接收数据

printf("请输入第%d项的系数与指数:",i+1);

scanf("%f %d",p-coef,p-expn);

Insert(p,head); //调用Insert函数插入结点

}

return head;

}//CreatePolyn

void DestroyPolyn(Polyn p){//销毁多项式p

Polyn q1,q2;

q1=p-next;

q2=q1-next;

while(q1-next){

free(q1);

q1=q2;//指针后移

q2=q2-next;

}

}

void PrintPolyn(Polyn P){

Polyn q=P-next;

int flag=1;//项数计数器

if(!q) { //若多项式为空,输出0

putchar('0');

printf("\n");

return;

}

while (q){

if(q-coef0flag!=1) putchar('+'); //系数大于0且不是第一项

if(q-coef!=1q-coef!=-1){//系数非1或-1的普通情况

printf("%g",q-coef);

if(q-expn==1) putchar('X');

else if(q-expn) printf("X^%d",q-expn);

}

else{

if(q-coef==1){

if(!q-expn) putchar('1');

else if(q-expn==1) putchar('X');

else printf("X^%d",q-expn);

}

if(q-coef==-1){

if(!q-expn) printf("-1");

else if(q-expn==1) printf("-X");

else printf("-X^%d",q-expn);

}

}

q=q-next;

flag++;

}//while

printf("\n");

}//PrintPolyn

int compare(Polyn a,Polyn b){

if(ab){

if(!b||a-expnb-expn) return 1;

else if(!a||a-expnb-expn) return -1;

else return 0;

}

else if(!ab) return -1;//a多项式已空,但b多项式非空

else return 1;//b多项式已空,但a多项式非空

}//compare

Polyn AddPolyn(Polyn pa,Polyn pb){//求解并建立多项式a+b,返回其头指针

Polyn qa=pa-next;

Polyn qb=pb-next;

Polyn headc,hc,qc;

hc=(Polyn)malloc(sizeof(struct Polynomial));//建立头结点

hc-next=NULL;

headc=hc;

while(qa||qb){

qc=(Polyn)malloc(sizeof(struct Polynomial));

switch(compare(qa,qb)){

case 1:

{

qc-coef=qa-coef;

qc-expn=qa-expn;

qa=qa-next;

break;

}

case 0:

{

qc-coef=qa-coef+qb-coef;

qc-expn=qa-expn;

qa=qa-next;

qb=qb-next;

break;

}

case -1:

{

qc-coef=qb-coef;

qc-expn=qb-expn;

qb=qb-next;

break;

}

}//switch

if(qc-coef!=0){

qc-next=hc-next;

hc-next=qc;

hc=qc;

}

else free(qc);//当相加系数为0时,释放该结点

}//while

return headc;

}//AddPolyn

Polyn SubtractPolyn(Polyn pa,Polyn pb){//求解并建立多项式a+b,返回其头指针

Polyn h=pb;

Polyn p=pb-next;

Polyn pd;

while(p){ //将pb的系数取反

p-coef*=-1;

p=p-next;

}

pd=AddPolyn(pa,h);

for(p=h-next;p;p=p-next) //恢复pb的系数

p-coef*=-1;

return pd;

}//SubtractPolyn

float ValuePolyn(Polyn head,float x){//输入x值,计算并返回多项式的值

Polyn p;

int i;

float sum=0,t;

for(p=head-next;p;p=p-next){

t=1;

for(i=p-expn;i!=0;){

if(i0){t/=x;i++;}//指数小于0,进行除法

else{t*=x;i--;}//指数大于0,进行乘法

}

sum+=p-coef*t;

}

return sum;

}//ValuePolyn

Polyn Derivative(Polyn head){//求解并建立a的导函数多项式,并返回其头指针

Polyn q=head-next,p1,p2,hd;

hd=p1=(Polyn)malloc(sizeof(struct Polynomial));//建立头结点

hd-next=NULL;

while(q){

if(q-expn!=0){ //该项不是常数项时

p2=(Polyn)malloc(sizeof(struct Polynomial));

p2-coef=q-coef*q-expn;

p2-expn=q-expn-1;

p2-next=p1-next;//连接结点

p1-next=p2;

p1=p2;

}

q=q-next;

}

return hd;

}//Dervative

Polyn MultiplyPolyn(Polyn pa,Polyn pb){//求解并建立多项式a*b,返回其头指针

Polyn hf,pf;

Polyn qa=pa-next;

Polyn qb=pb-next;

hf=(Polyn)malloc(sizeof(struct Polynomial));//建立头结点

hf-next=NULL;

for(;qa;qa=qa-next){

for(qb=pb-next;qb;qb=qb-next){

pf=(Polyn)malloc(sizeof(struct Polynomial));

pf-coef=qa-coef*qb-coef;

pf-expn=qa-expn+qb-expn;

Insert(pf,hf);//调用Insert函数以合并指数相同的项

}

}

return hf;

}//MultiplyPolyn

void DevicePolyn(Polyn pa,Polyn pb){//求解并建立多项式a*b,返回其头指针

Polyn hf,pf,af,temp1,temp2,q;

Polyn qa=pa-next;

Polyn qb=pb-next;

hf=(Polyn)malloc(sizeof(struct Polynomial));//建立头结点,存储商

hf-next=NULL;

pf=(Polyn)malloc(sizeof(struct Polynomial));//建立头结点,存储余数

pf-next=NULL;

temp1=(Polyn)malloc(sizeof(struct Polynomial));

temp1-next=NULL;

temp2=(Polyn)malloc(sizeof(struct Polynomial));

temp2-next=NULL;

temp1=AddPolyn(temp1,pa);

while(qa!=NULLqa-expn=qb-expn){

temp2-next=(Polyn)malloc(sizeof(struct Polynomial));

temp2-next-coef=(qa-coef)/(qb-coef);

temp2-next-expn=(qa-expn)-(qb-expn);

Insert(temp2-next,hf);

pa=SubtractPolyn(pa,MultiplyPolyn(pb,temp2));

qa=pa-next;

temp2-next=NULL;

}

pf=SubtractPolyn(temp1,MultiplyPolyn(hf,pb));

pb=temp1;

printf("商是:");

PrintPolyn(hf);

printf("余数是:");

PrintPolyn(pf);

}//DevicePolyn

int main(){

int m,n,flag=0;

float x;

Polyn pa=0,pb=0,pc,pd,pe,pf;//定义各式的头指针,pa与pb在使用前付初值NULL

printf("请输入a的项数:");

scanf("%d",m);

pa=CreatePolyn(pa,m);//建立多项式a

printf("请输入b的项数:");

scanf("%d",n);

pb=CreatePolyn(pb,n);//建立多项式a

//输出菜单

printf("**********************************************\n");

printf("操作提示:\n\t1.输出多项式a和b\n\t2.建立多项式a+b\n\t3.建立多项式a-b\n");

printf("\t4.计算多项式a在x处的值\n\t5.求多项式a的导函数\n\t6.建立多项式a*b\n");

printf("\t7.建立多项式a/b\n\t8.退出\n**********************************************\n");

for(;;flag=0){

printf("执行操作");

scanf("%d",flag);

if(flag==1){

printf("多项式a:");PrintPolyn(pa);

printf("多项式b:");PrintPolyn(pb);continue;

}

if(flag==2){

pc=AddPolyn(pa,pb);

printf("多项式a+b:");PrintPolyn(pc);

DestroyPolyn(pc);continue;

}

if(flag==3){

pd=SubtractPolyn(pa,pb);

printf("多项式a-b:");PrintPolyn(pd);

DestroyPolyn(pd);continue;

}

if(flag==4){

printf("输入x的值:x=");

scanf("%f",x);

printf("多项式a的值%g\n",ValuePolyn(pa,x));continue;

}

if(flag==5){

pe=Derivative(pa);

printf("多项式a的导函数:");PrintPolyn(pe);

DestroyPolyn(pe);continue;

}

if(flag==6){

pf=MultiplyPolyn(pa,pb);

printf("多项式a*b:");PrintPolyn(pf);

DestroyPolyn(pf);continue;

}

if(flag==7){

DevicePolyn(pa,pb);

continue;

}

if(flag==8) break;

if(flag1||flag8) printf("Error!!!\n");continue;

}//for

DestroyPolyn(pa);

DestroyPolyn(pb);

return 0;

}

java中框架Junit应该怎么使用?

JUnit

JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework)。Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。Junit是一套框架,继承TestCase类,就可以用Junit进行自动测试了。

更多JUnit信息

Cactus

Cactus是一个基于JUnit框架的简单测试框架,用来单元测试服务端Java代码。Cactus框架的主要目标是能够单元测试服务端的使用Servlet对象的Java方法如HttpServletRequest,HttpServletResponse,HttpSession等

更多Cactus 信息

Abbot

Abbot是一个用来测试Java GUIs的框架。用简单的基于XML的脚本或者Java代码,你就可以开始一个GUI。

更多Abbot信息

JUnitPerf

Junitperf实际是junit的一个decorator,通过编写用于junitperf的单元测试,我们也可使测试过程自动化。

更多JUnitPerf信息

DbUnit

DbUnit是为数据库驱动的项目提供的一个对JUnit 的扩展,除了提供一些常用功能,它可以将你的数据库置于一个测试轮回之间的状态。

更多DbUnit信息

Mockrunner

Mockrunner用在J2EE环境中进行应用程序的单元测试。它不仅支持Struts actions, servlets,过滤器和标签类还包括一个JDBC和一个JMS测试框架,可以用于测试基于EJB的应用程序。

更多Mockrunner信息

DBMonster

DBMonster是一个用生成随机数据来测试SQL数据库的压力测试工具。

更多DBMonster信息

MockEJB

MockEJB是一个不需要EJB容器就能运行EJB并进行测试的轻量级框架。

更多MockEJB信息

StrutsTestCase

StrutsTestCase 是Junit TestCase类的扩展,提供基于Struts框架的代码测试。StrutsTestCase同时提供Mock 对象方法和Cactus方法用来实际运行Struts ActionServlet,你可以通过运行servlet引擎来测试。因为StrutsTestCase使用ActionServlet控制器来测试你的代码,因此你不仅可以测试Action对象的实现,而且可以测试mappings,from beans以及forwards声明。StrutsTestCase不启动servlet容器来测试struts应用程序(容器外测试)也属于Mock对象测试,但是与EasyMock不同的是,EasyMock是提供了创建Mock对象的API,而StrutsTest则是专门负责测试Struts应用程序的Mock对象测试框架。

更多StrutsTestCase信息

JFCUnit

JFCUnit使得你能够为Java偏移应用程序编写测试例子。它为从用代码打开的窗口上获得句柄提供了支持;为在一个部件层次定位部件提供支持;为在部件中发起事件(例如按一个按钮)以及以线程安全方式处理部件测试提供支持。

更多JFCUnit信息

JTestCase

JTestCase 使用XML文件来组织多测试案例数据,声明条件(操作和期望的结果),提供了一套易于使用的方法来检索XML中的测试案例,按照数据文件的定义来声明结果。

更多JTestCase信息

SQLUnit

SQLUnit是一个单元测试框架,用于对数据库存储过程进行加归测试。用 Java/JUnit/XML开发。

更多SQLUnit信息

JTR

JTR (Java Test Runner)是一个开源的基于反转控制(IOC)的J2EE测试框架。它允许你构建复杂的J2EE测试套件(Test Suites)并连到应用服务器执行测试,可以包括多个测试实例。JTR的licensed是GPL协议。

更多JTR信息

Marathon

Marathon是一个针对使用Java/Swing开发GUI应用程序的测试框架,它由recorder, runner 和 editor组成,测试脚本是python代码。Marathon的焦点是放在最终用户的测试上。

更多Marathon信息

TestNG

TestNG是根据JUnit 和 NUnit思想而构建的一个测试框架,但是TestNG增加了许多新的功能使得它变得更加强大与容易使用比如:

*支持JSR 175注释(JDK 1.4利用JavaDoc注释同样也支持)

*灵活的Test配置

*支持默认的runtime和logging JDK功能

*强大的执行模型(不再TestSuite)

*支持独立的测试方法。

更多TestNG信息

Surrogate Test framework

Surrogate Test framework是一个值得称赞单元测试框架,特别适合于大型,复杂Java系统的单元测试。这个框架能与JUnit,MockEJB和各种支持模拟对象(mock object )的测试工具无缝给合。这个框架基于AspectJ技术。

更多Surrogate Test framework信息

MockCreator

MockCreator可以为给定的interface或class生成模拟对象(Mock object)的源码。

更多MockCreator信息

jMock

jMock利用mock objects思想来对Java code进行测试。jMock具有以下特点:容易扩展,让你快速简单地定义mock objects,因此不必打破程序间的关联,让你定义灵活的超越对象之间交互作用而带来测试局限,减少你测试地脆弱性。

更多jMock信息

EasyMock

EasyMock为Mock Objects提供接口并在JUnit测试中利用Java的proxy设计模式生成它们的实例。EasyMock最适合于测试驱动开发。

更多EasyMock信息

Grinder

Grinder是一个开源的Java负载测试框架,它通过很多负载注射器来为分布式测试提供了便利。

支持用于执行测试脚本的Jython脚本引擎

HTTP测试可通过HTTP代理进行管理。

更多Grinder信息

XMLUnit

XMLUnit不仅有Java版本的还有.Net版本的。Java开发的XMLUnit提供了两个JUnit 扩展类XMLAssert和XMLTestCase,和一组支持的类。这些类可以用来比较两张XML之间的不同之处,展示XML利用XSLT来,校验XML,求得XPath表达式在XML中的值,遍历XML中的某一节点利DOM展开,

更多XMLUnit信息

Jameleon

Jameleon一个自动化测试工具。它被用来测试各种各样的应用程序,所以它被设计成插件模式。为了使整个测试过程变得简单Jameleon提供了一个GUI,因此Jameleon实现了一个Swing 插件。

更多Jameleon信息

J2MEUnit

J2MEUnit是应用在J2ME应用程序的一个单元测试框架。它基于JUnit.

更多J2MEUnit信息

Jetif

Jetif是一个用纯Java实现的回归测试框架。它为Java程序单元测试以及功能测试提供了一个简单而且可 伸缩的架构,可以用于个人开发或企业级开发的测试。它容易使用,功能强大,而且拥有一些企业级测试的 重要功能。Jetif来源于JUnit, JTestCase以及TestNG的启发,有几个基本的概念直接来自于JUnit, 比如说断言机制,Test Listener的概念,因此从JUnit转到Jetif是非常容易的。

更多Jetif信息

GroboUtils

GroboUtils使得扩展Java测试变得可能。它包括用在Java不同方面测试的多个子项目。在GroboUtils中最常被到的工具是:多线程测试(multi-threaded tests),整体单元测试(hierarchial unit tests),代码覆盖工具(code coverage tool)。

更多GroboUtils信息

Testare

TESTARE是用来简化分布式应用程序(比如:在SERVLETS,JMS listeners, CORBA ORBs或RMI环境下)测试开发过程的一个测试框架.

更多Testare信息

MockLib

MockLib是一个很小的包所以可容易地动态创建一个模拟对象.你可以从模拟的系统中抛出异常来确保你的系统能够正确处理错误.它同样也是一个线程安全的模拟对象库.

更多MockLib信息

JellyUnit

JellyUnit是一个基于Jelly的JUnit测试机制.它允许用Jelly脚本来完成单元测试.尤其是对于XML,XPath,SQL,HTTP,JMS和SOAP交互的测试特别有用.

更多JellyUnit信息

Pisces

这个项目继承于JUnit目的是提供一个分布式的测试环境.它给开发者/测试人员一个运行远程JUnits和复杂测试案例的能力,这个案例由几个并行运行的远程JUnit测试组成。

更多Pisces信息

JUnitEE

JUnitEE是对JUnit的一个简单扩展,可以支持在一个J2EE应用程序服务器上执行标准的测试案例。它主要由一个把测试结果输出为html的servlet组成。

更多JUnitEE信息

java环境怎么更新testng

TestNG仍然是我最喜欢的,而且它仍然保持更新。现在在开源的Java测试框架中仍然有新进者,easyb,一个基于Groovy行为驱动开发的测试工具,为Java和Groovy测试。通过编写合理的测试或是假定一个任务,它可以视为一种规范尽管它是可执行代码。如果你在Ruby世界中使用Rspec一样。 为什么JUnit仍然是首选——Aslam Khan像许多人开始测试驱动开发和单元测试一样,我也是从JUnit3.x起步的。我发现JUnit是最广泛的工具,出现在各种不同的地方(ANT,Maven,Eclipse,IntelliJ IDEA, 等)。它也很容易介绍给那些新团队。我也使用TestNG对它的多样性同样印象深刻。然而,JUnit的大量插件(dbUnit,xmlUnit等)使得Junit仍然是首选的。如果你花大量的时间在Spring上,那么基于Junit的Srping ApplicationContext aware测试用例会带来优势。为了测试前台,我几乎只使用Selenium.我曾经涉足过Canoo和其他的框架,但是发现这些途径都是反TDD模式的。使用Selenium,我可以处理Selenium测试脚本和记录,给任何需要的人并日后处理。 如果我们谈论的是纯粹的TDD,即书写良好的代码(不仅仅是良好的测试)需要增加一个mock测试。对于mocking,我使用Jmock,它和Junit配合良好,通过基于mock的方式和程序内部边界,我得到了设计良好的,互相通信的对象。这在可读性和可维护性上迈出了重要的一步。EasyMock也不错,但是Jmock是我个人的首选。 从Java世界上溯到Ruby世界中,RSpec很优秀而且也有DSL来描述场景。既然Rbehave已经融合进了Rspec,这样的整合将成为Ruby世界的首选。有趣的是,Rbehave是从Jbehave衍生来来,它是一个行为驱动开发测试框架。

dbunitjava的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于、dbunitjava的信息别忘了在本站进行查找喔。

The End

发布于:2022-11-21,除非注明,否则均为首码项目网原创文章,转载请注明出处。