junit单元测试如何使用eclipse进行junit测试

junit单元测试  时间:2021-06-17  阅读:()

如何使用junit编写测试类

首先我们需要先下载相应的 JUnit 相关的 JAR 包,下载的过程可以去 JUnit 的官方网站,也可以直接通过 Maven 资源仓库来完成。

使用简单的 @Test 注解实现我们的测试方法的编写和执行 准备工作做好之后,接下来我们就可以开始尝试编写壹个简单的测试代码了。

首先,我们编写了壹个 Calculator 类,并提供五个方法分别完成加减乘除以及求平方的运算。

代码如下: .oschina.bairrfhoinn.main; public class Calculator { public void add(int n){ result += n; } public void substract(int n){ result -= n; } public void multiply(int n){ result *= n; } public void divide(int n){ result /= n; } public void square(int n){ result = n * n; } public int getReuslt(){ return result; } public void clear(){ result = 0; } private static int result; } 在测试类中用到了JUnit4框架,自然要把相应地Package包含进来。

最主要地一个Package就.junit.*。

把它包含进来之后,绝大部分功能就有了。

还有一句话也非常地重要“import .junit.Assert.*;”,我们在测试的时候使用的壹系列assertEquals()方法就来自这个包。

大家注意壹下,这是壹个静态包含(static),是JDK5中新增添的壹个功能。

也就是说,assertEquals是Assert类中的壹系列的静态方法,壹般的使用方式是Assert. assertEquals(),但是使用了静态包含后,前面的类名就可以省略了,使用起来更加的方便。

另外要注意的是,我们的测试类是壹个独立的类,没有任何父类。

测试类的名字也可以任意命名,没有任何局限性。

所以我们不能通过类的声明来判断它是不是一个测试类,它与普通类的区别在于它内部的方法的声明,我们接着会讲到。

在测试类中,并不是每壹个方法都是用于测试的,所以我们必须使用“注解”来明确表明哪些是测试方法。

“注解”也是JDK5的壹个新特性,用在此处非常恰当。

我们可以看到,在某些方法的前有@Before、@Test、@Ignore等字样,这些就是注解,以壹个“@”作为开头。

这些注解都是JUnit4自定义的,熟练掌握这些注解的含义,对于编写恰当的测试类非常重要。

接下来我们创建壹个测试类 CalculatorTest.java,代码如下: .oschina.bairrfhoinn.test; import .junit.Assert.*; .junit.Test; .oschina.bairrfhoinn.main.Calculator; public class CalculatorTest { private static Calculator calculator = new Calculator(); @Test public void testAdd(){ calculator.add(7); calculator.add(8); assertEquals(15, calculator.getReuslt()); } } 首先,我们要在方法的前面使用@Test标注,以表明这是壹个测试方法。

对于方法的声明也有如下要求:名字可以随便取,没有任何限制,但是返回值必须为void,而且不能有任何参数。

如果违反这些规定,会在运行时抛出壹个异常。

至于方法内该写些什么,那就要看你需要测试些什么了。

比如上述代码中,我们想测试壹下add()方法的功能是否正确,就在测试方法中调用几次add函数,初始值为0,先加7,再加8,我们期待的结果应该是15。

如果最终实际结果也是15,则说明add()方法是正确的,反之说明它是错的。

assertEquals(15, calculator.getResult());就是用来判断期待结果和实际结果是否相等,其中第壹个参数填写期待结果,第二个参数填写实际结果,也就是通过计算得到的结果。

这样写好之后,JUnit 会自动进行测试并把测试结果反馈给用户。

如果想运行它,可以在 eclipse 的资源管理器中选择该类文件,然后点击右键,选择 Run As->JUnit Test 即可看到运行结果。

使用@Test 的属性 Ignore 指定测试时跳过这个方法 如果在写程序前做了很好的规划,那么哪些方法是什么功能都应该实现并且确定下来。

因此,即使该方法尚未完成,他的具体功能也是确定的,这也就意味着你可以为他编写测试用例。

但是,如果你已经把该方法的测试用例写完,但该方法尚未完成,那么测试的时候无疑是“失败”。

这种失败和真正的失败是有区别的,因此 JUnit 提供了壹种方法来区别他们,那就是在这种测试函数的前面加上 @Ignore 标注,这个标注的含义就是“某些方法尚未完成,暂不参与此次测试”。

这样的话测试结果就会提示你有几个测试被忽略,而不是失败。

壹旦你完成了相应函数,只需要把@Ignore标注删去,就可以进行正常的测试。

比如说上面的测试类 Calculator.java 中,假设我们的 Calculator 类的 multiply() 方法没有实现,我们可以在测试类 CalculatorTest 中先写如下测试代码: .oschina.bairrfhoinn.test; import .junit.Assert.*; .junit.Ignore; .junit.Test; .oschina.bairrfhoinn.main.Calculator; public class CalculatorTest { private static Calculator calculator = new Calculator(); ... //此处代码省略 @Ignore("method square() not implemented, please test this later...") @Test public void testSquare(){ calculator.square(3); assertEquals(9, calculator.getReuslt()); } } 我们再运行壹次测试,会看到如下结果,从图中可以很明显的看出,方法testSquare() 上的 @Ignore 注解已经生效了,运行时直接跳过了它,而方法testAdd()仍然正常的运行并通过了测试。

使用注解 @Before 和 @After 来完成前置工作和后置工作 前置工作通常是指我们的测试方法在运行之前需要做的壹些准备工作,如数据库的连接、文件的加载、输入数据的准备等需要在运行测试方法之前做的事情,都属于前置工作;类似的,后置工作则是指测试方法在运行之后的壹些要做的事情,如释放数据库连接、输入输出流的关闭等;比如我们上面的测试,由于只声明了壹个 Calculator 对象,他的初始值是0,但是测试完加法操作后,他的值就不是0了;接下来测试减法操作,就必然要考虑上次加法操作的结果。

这绝对是壹个很糟糕的设计!我们非常希望每壹个测试方法都是独立的,相互之间没有任何耦合度。

因此,我们就很有必要在执行每壹个测试方法之前,对Calculator对象进行壹个“复原”操作,以消除其他测试造成的影响。

因此,“在任何壹个测试方法执行之前必须执行的代码”就是壹个前置工作,我们用注解 @Before 来标注它,如下例子所示: .oschina.bairrfhoinn.test; ... .junit.After; .junit.Before; .junit.Ignore; .junit.Test; public class CalculatorTest { ...//这里省略部分代码 @Before public void setUp() throws Exception { calculator.clear(); } @After public void tearDown() throws Exception { System.out.println("will do sth here..."); } ...//这里省略部分代码 } 另外要说的是,注解 @Before 是定义在.junit.Before 这个类中的,因此使用时需要将其引入我们的代码中。

这样做了之后,每次我们运行测试方法时,JUnit 都会先运行 setUp() 方法将 result 的值清零。

不过要注意的是,这里不再需要 @Test 注解,因为这并不是壹个 test,只是壹个前置工作。

同理,如果“在任何测试执行之后需要进行的收尾工作,我们应该使用 @After 来标注,方法与它类似。

由于本例比较简单,不需要用到此功能,所以我们只是简单了给它添加了壹个 tearDown() 方法并在收尾时打印壹句话到控制台,并且使用 @After 来注解这个方法。

使用@BeforeClass 和 @AfterClass 来完成只需要执行壹次的前置工作和后置工作 上面我们提到了两个注解 @Before 和 @After ,我们来看看他们是否适合完成如下功能:有壹个类负责对大文件(超过500 MB)进行读写,他的每壹个方法都是对文件进行操作。

换句话说,在调用每壹个方法之前,我们都要打开壹个大文件并读入文件内容,这绝对是壹个非常耗费时的操作。

如果我们使用 @Before 和 @After ,那么每次测试都要读取壹次文件,效率及其低下。

所以我们希望的是,在所有测试壹开始读壹次文件,所有测试结束之后释放文件,而不是每次测试都读文件。

JUnit的作者显然也考虑到了这个问题,它给出了@BeforeClass 和 @AfterClass 两个注解来帮我们实现这个功能。

从名字上就可以看出,用这两个注解标注的函数,只在测试用例初始化时执行 @BeforeClass 方法,当所有测试执行完毕之后,执行 @AfterClass 进行收尾工作。

在这里要注意壹下,每个测试类只能有壹个方法被标注为 @BeforeClass 或 @AfterClass,而且该方法必须是 public static 类型的。

使用@Test 的属性 timeout 来完成限时测试,以检测代码中的死循环 现在假设我们的 Calculator 类中的 square() 方法是个死循环,那应该怎么办呢,比如说像下面这样: public void square(int n){ for(;;){} } 如果测试的时候遇到死循环,你的脸上绝对不会露出笑容的。

因此,对于那些逻辑很复杂,循环嵌套比较深的、有可能出现死循环的程序,因此壹定要采取壹些预防措施。

限时测试是壹个很好的解决方案。

我们给这些测试函数设定壹个预期的执行时间,超过了这壹时间,他们就会被系统强行终止,并且系统还会向你汇报该函数结束的原因是因为超时,这样你就可以发现这些 Bug 了。

要实现这壹功能,只需要给 @Test 标注加壹个参数timeout即可,代码如下: @Test(timeout=2000L) public void testSquare() { calculator.square(3); assertEquals(9, calculator.getReuslt()); } timeout参数表明了你预计该方法运行的时长,单位为毫秒,因此2000就代表2秒。

现在我们让这个测试方法运行壹下,看看失败时是什么效果。

使用@Test 的属性expected来监控测试方法中可能会抛出的某些异常 JAVA中的异常处理也是壹个重点,因此你经常会编写壹些需要抛出异常的函数。

如果你觉得壹个函数应该抛出异常,但是它没抛出,这算不算 Bug 呢?这当然是Bug,JUnit 也考虑到了这壹点,并且可以帮助我们找到这种 Bug。

例如,我们写的计算器类有除法功能,如果除数是壹个0,那么必然要抛出“除0异常”。

因此,我们很有必要对这些进行测试。

代码如下: @Test(expected=java.lang.ArithmeticException.class) public void testDivide(){ calculator.divide(0); } 如上述代码所示,我们需要使用@Test注解中的expected属性,将我们要检验的异常(这里是 java.lang.ArithmeticException)传递给他,这样 JUnit 框架就能自动帮我们检测是否抛出了我们指定的异常。

指定 JUnit 运行测试用例时的 Runner 大家有没有想过这个问题,当你把测试代码提交给JUnit框架后,框架是如何来运行你的代码的呢?答案就是Runner。

在JUnit中有很多个Runner,他们负责调用你的测试代码,每壹个Runner都有其各自的特殊功能,你要根据需要选择不同的Runner来运行你的测试代码。

可能你会觉得奇怪,前面我们写了那么多测试,并没有明确指定壹个Runner啊?这是因为JUnit中有壹个默认的Runner,如果你没有指定,那么系统会自动使用默认Runner来运行你的代码。

换句话说,下面两段代码含义是完全壹样的: .junit.runner.RunWith; .junit.runners.JUnit4; @RunWith(JUnit4.class) public class CalculatorTest { ...//省略此处代码 } //用了系统默认的JUnit4.class,运行效果完全壹样 public class CalculatorTest { ...//省略此处代码 }

单元测试和instrumentation测试的区别

Android单元测试是通过junit框架来测试的。

Android中建立JUnit测试环境有以下方法。

集成步骤: 1.在androidManifest.xml文件中添加以下代码: <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage=&.example.junittest" android:label="@string/app_name" ></instrumentation> 2.新建一个测试测试类并继承AndroidTestCase类,编写测试方法,在测试方法内使用断言assert来测试要测试的方法。

3.点击右面的大纲视图,选择要测试的方法,右键,run as --->Android JUnit test 。

如何进行进行junit单元测试

编写测试用例, Junit4支持注解了,只要在要执行的方法前加@Test即可,如: @Test public void multiplyPoundsByInteger() { assertEquals( 10, 5 ); } Junit4增加了许多特性,主要是支持注解了: 测试由原来的命名模式改变注解,即testXXX变为@Test。

其中@Test还提供了额外的属性。

如expected,表示期望抛出的异常 数组比较改用Assert.assertArrayEquals 套件测试也用注解替换 通过@Ignore,可以忽略某个方法或整个类的测试 增加了新特性-理论机制(Theory),这个特性听起来很迷惑人,作用是使得开发人员从开始的定义测试用例的阶段就可以通过参数集(理论上是无限个参数)对代码行为进行概括性的总结.开发人员都知道他们代码所想要实现的概括性的总的目的,理论使得他们只需要在一个地方就可以快速的指定这些目的,而不要将这些目的翻译成大量的独立的测试用例。

提供了新的特性-假设机制(Assumption).此特性使用了Hamcrest库的类.本来Hamcrest是一个单独的测试组件,Junit也集成了一部分,但是并没有完全包含。

建议使用junit独立的JAR文件,再单独引入hamcrest包。

其实hamcrest的功能相当的强大,理解起来也非常的容易,是一个很不错的组件。

它提供assertThat,assumeThat,assumeNotNull等假设语句,也提供is,not,both..and,either..or等用法,非常的灵活。

@Before,@After,@BeforeClass,@AfterClass.这几个注解一看便知大概,@Before表示每个测试方法执行前执行一次,而@BeforeClass表示整个类测试前执行一次。

不过需要注意的是,@BeforeClass,@AtferClass注解的方法必须是静态的。

Junit提供了新的核心运行类MaxCore,相对于以前的JunitCore运行机制,这个类有一系列的优点,如从未测试过的方法优先测试,剩下的测试中,以前测试失败的方法优先测试,再其次,运行快的优先于运行慢的方法。

参数化测试 允许通过变化范围的参数值来测试方法。

超时测试(Timeout test)可以被用来测试方法的执行时间。

Rule。

它是JUnit4.7才开始提供的一种扩展方式,它能够替代大部分已有的Runner扩展。

JUnit包含两种Rule Annotation:@ClassRule与@Rule。

@ClassRule应用于测试类中的静态变量,而@Rule应用于成员变量;相同地是,这些变量必须是TestRule接口的实例,且访问修饰符必须为public。

Eclipse中怎么使用junit测试

如果你用的Eclipse For JavaEE版本的话,编写JUnit测试用例很容易,直接Ctrl+N,输入ju->JUnit Test Suite-next-next。

就行了

如何使用eclipse进行junit测试

这儿我就举一个简单的例子。

你要使用junit你的确保拥有junit的jar包,我这儿使用的是junit-4.11.jar。

你可以像学习java初期一样写一个简单javabean,例如User里面就两个属性:id(学号) name(姓名); 然后建立一个用于测试的类(类名你随意):Test;创建一个getUsername方法。

该方法里面声明了user实例,并写一个输出语句(输出name); 需要注意马上就是使用junit测试,我们需要将getUsername方法上面添加@Test;然后你再运行这个方法就行了

Sparkedhost($8/月)美国迈阿密AMD Ryzen高性能VPS;免费100G高防

sparkedhost怎么样?sparkedhost主机。Sparkedhost于2017年7月注册在美国康涅狄格州,2018年收购了ClynexHost,2019年8月从Taltum Solutions SL收购了The Beast Hosting,同年10月从Reilly Bauer收购了OptNode Hosting。sparkedhost当前的业务主要为:为游戏“我的世界”提供服务器、虚拟...

HostKvm四月优惠:VPS主机全场八折,香港/美国洛杉矶机房$5.2/月起

HostKvm是一家成立于2013年的国外主机服务商,主要提供基于KVM架构的VPS主机,可选数据中心包括日本、新加坡、韩国、美国、中国香港等多个地区机房,均为国内直连或优化线路,延迟较低,适合建站或者远程办公等。本月商家针对全场VPS主机提供8折优惠码,优惠后美国洛杉矶VPS月付5.2美元起。下面列出几款不同机房VPS主机产品配置信息。套餐:美国US-Plan0CPU:1cores内存:1GB硬...

酷锐云香港(19元/月) ,美国1核2G 19元/月,日本独立物理机,

酷锐云是一家2019年开业的国人主机商家,商家为企业运营,主要销售主VPS服务器,提供挂机宝和云服务器,机房有美国CERA、中国香港安畅和电信,CERA为CN2 GIA线路,提供单机10G+天机盾防御,提供美国原生IP,支持媒体流解锁,商家的套餐价格非常美丽,CERA机房月付20元起,香港安畅机房10M带宽月付25元,有需要的朋友可以入手试试。酷锐云自开业以来一直有着良好的产品稳定性及服务态度,支...

junit单元测试为你推荐
absolute居中absolute与relative怎么区分?求解ata考试有人能仔细讲一下ATA考试是什么吗?动态图片格式动态图片是什么格式?listviewitem安卓如何添加Listview的item?shoujiao黑鲨手机SKW一AO怎么解锁?netbios协议机子上启动了netbios协议,为什么还是运行不了netbios命令音乐代码在html中插入mp3音频的代码是什么java程序员招聘Java程序员,一般招聘都要求些啥erp系统教程ERP系统怎么使用cc防火墙web防火墙有什么作用
北京网站空间 百度域名 美国服务器租用 谷歌域名邮箱 westhost 免费主机 realvnc 密码泄露 hostker 谁的qq空间最好看 已备案删除域名 赞助 免费phpmysql空间 t云 shopex主机 上海电信测速 cxz 云销售系统 服务器防御 谷歌搜索打不开 更多