dbunitjava的简单介绍
今天给各位分享dbunitjava的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、怎样选择Java测试框架 JUnit还是TestNG?
- 2、自动化测试java怎么锁定到新打开的窗口
- 3、java中完成一元稀疏多项式的基本运算
- 4、java中框架Junit应该怎么使用?
- 5、java环境怎么更新testng
怎样选择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衍生来来,它是一个行为驱动开发测试框架。
自动化测试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的信息别忘了在本站进行查找喔。
发布于:2022-11-21,除非注明,否则均为
原创文章,转载请注明出处。