博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jUnit测试
阅读量:6817 次
发布时间:2019-06-26

本文共 6814 字,大约阅读时间需要 22 分钟。

hot3.png

<p>java中的测试,不单单是我们自己手写的一种main的主线程进行的测试,而且这一种的测试存在有一定的局限性,简单的认识一个java中的测试的jUnit的操作;</p> <p>jUnit的操作使用的时候,可以有两种方式,一种是我们直接的把我们自己写的测试类实现一个继承的操作,另一种的方式是需要我们的java测试类使用注解的方式,个人认为其本质还是一样子的,只是我们程序员在使用的时候,使用注解的方式代码量少而已。注解的方式我们也是可以知道的,其和hibernate等操作类似的,是一个利用的反射机制的操作。下面简单的认识我们的测试:</p> <p>一、简单的基本测试:</p> <p>创建一个项目,java项目就可以使用的,在项目中建立几个测试的用例:</p> <p>1、UserDao</p> <blockquote> <p>package com.fww.test;</p> <p>/** <br />* @author fu <br />*模拟实现的一个方法用于进行测试的类。 <br />*/ <br />public class UserDao { <br />&#160;&#160;&#160; public void add(){ <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; System.out.println(&quot;add方法的测试!&quot;); <br />&#160;&#160;&#160; } <br />} <br /></p> </blockquote> <p>2、TeaDao</p> <blockquote> <p>package com.fww.test;</p> <p>/** <br />* 模拟实现的一个测试的类,用于测试 <br />* @author fu <br />* <br />*/ <br />public class TeaDao { <br />&#160;&#160;&#160; public int del(int a, int b) { <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; //在控制台打印信息用于检测我们的测试程序已经执行到方法的内部 <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; System.out.println(&quot;del&quot;); <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; return a + b; <br />&#160;&#160;&#160; } <br />} <br /></p> </blockquote> <p>在我们的项目中导入jUnit依赖的jar包(这里使用的是4.4的版本):junit-4.4.jar</p> <p>然后再我们的项目中和创建一个source folder的文件夹,建立完成以后可以知道我们的这个文件和src是并行的处于同一目录下,在其中创建我们的测试的用例,规范的操作是建立一些包名和需要进行的测试的类名称一致的包名,建立我们的类的时候可以建立一个“类名+Test”的形式的测试类,如:</p> <p>3、UserTeaDaoTest</p> <blockquote> <p>package com.fww.test;</p> <p>import junit.framework.Assert; <br />import junit.framework.TestCase;</p> <p>/** <br />* 针对userdao和teadao的测试使用的一个类 <br />* @author fu <br />* <br />*/ <br />public class UserTeaDaoTest extends TestCase { <br />&#160;&#160;&#160; // 引用一个userdao <br />&#160;&#160;&#160; private UserDao dao = new UserDao(); <br />&#160;&#160;&#160; // 引用一个teadao <br />&#160;&#160;&#160; private TeaDao teaDao = new TeaDao();</p> <p>&#160;&#160;&#160; // 测试时候的方法的名字是固定的,是一个“test+方法名”的形式 <br />&#160;&#160;&#160; public void testAdd() { <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; dao.add(); <br />&#160;&#160;&#160; }</p> <p>&#160;&#160;&#160; public void testDel() { <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; int a = 1; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; int b = 9; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; // 我们自己的断言的一个数值的说明 <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; int expected = 11; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; // 实际程序运行时候的数值 <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; int actual = teaDao.del(a, b); <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; // 测试断言的正确性 <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; Assert.assertEquals(expected, actual); <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; // return 0; <br />&#160;&#160;&#160; }</p> <p>} <br /></p> </blockquote> <p>上述的测试的类实现的是一个在一个类中对两个类的测试的操作,我们在实际测试的时候,可以适当的分开进行测试,如此一个基本的测试块建立完成,我们可以运行我们的测试类了,下面会有相应的提示,我们的测试runs&#160;&#160; errors&#160; failures</p> <p>以上是一个测试两个小模块的操作,我们可以把多个类似以上的测试操作整合到一个类中去进行一个集中的测试,如下:</p> <p>4、MainTest</p> <blockquote> <p>package com.fww.test;</p> <p>import junit.framework.Test; <br />import junit.framework.TestSuite;</p> <p>/** <br />* 进行的是一个测试的整合的操作 <br />* <br />* @author fu <br />* <br />*/ <br />public class MainTest {</p> <p>&#160;&#160;&#160; public static Test suite() {</p> <p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; TestSuite suite = new TestSuite(); <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; // 测试单个用例 <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; suite.addTestSuite(UserTeaDaoTest.class); <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; // 可以添加多个测试用例进行测试,添加的方法和上述的是一致的。 <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; //下面的注释说明的是测试一个的testClass的下面的所有子类的测试类 <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; // suite.addTestSuite(testClass); <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; return suite; <br />&#160;&#160;&#160; } <br />} <br /></p> </blockquote> <p>运行以后是和我们的测试一样的效果的。</p> <p>二、实现的是一个注解的方式的测试,测试用例还是之前的两个:</p> <p>1、UserDao</p> <blockquote> <p>package com.fww.test;</p> <p>/** <br />* @author fu <br />*用于进行的测试类 <br />*/ <br />public class UserDao { <br />&#160;&#160;&#160; <br />&#160;&#160;&#160; public void add(){ <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; System.out.println(&quot;add方法的测试!&quot;); <br />&#160;&#160;&#160; } <br />} <br /></p> </blockquote> <p>2、TeaDao</p> <blockquote> <p>package com.fww.test;</p> <p>/** <br />* @author fu <br />*用于进行的测试类 <br />*/ <br />public class TeaDao { <br />&#160;&#160;&#160; public int del(int a, int b) { <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; System.out.println(&quot;del&quot;);</p> <p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; return a + b; <br />&#160;&#160;&#160; } <br />} <br /></p> </blockquote> <p>3、一个小的模块的测试,UserTeaDaoTest</p> <blockquote> <p>package com.fww.test;</p> <p>import org.junit.Test;</p> <p>import junit.framework.Assert; <br />import junit.framework.TestCase;</p> <p>/** <br />* @author fu <br />*使用注解的方式实现的java的测试 <br />*测试的类是不需要进行继承操作 <br />*/ <br />public class UserTeaDaoTest {</p> <p>&#160;&#160;&#160; private UserDao dao = new UserDao(); <br />&#160;&#160;&#160; <br />&#160;&#160;&#160; private TeaDao teaDao = new TeaDao(); <br />&#160;&#160;&#160; /** <br />&#160;&#160;&#160;&#160; * 在测试的方法之前添加一个注解,告诉程序下面的代码是一个测试的方法 <br />&#160;&#160;&#160;&#160; * 方法名还是“test+方法名”的形式 <br />&#160;&#160;&#160;&#160; */ <br />&#160;&#160;&#160; @Test <br />&#160;&#160;&#160; public void testAdd(){ <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; dao.add(); <br />&#160;&#160;&#160; } <br />&#160;&#160;&#160; @Test <br />&#160;&#160;&#160; public void testDel(){ <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; int a = 1; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; int b = 9; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; int expected = 10; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; int actual= teaDao.del(a, b); <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; Assert.assertEquals(expected, actual); <br />//&#160;&#160;&#160;&#160;&#160;&#160;&#160; return 0; <br />&#160;&#160;&#160; } <br />&#160;&#160;&#160;&#160; <br />} <br /></p> </blockquote> <p>4、注解的小的整体测试:</p> <blockquote> <p>package com.fww.test;</p> <p>import org.junit.runner.RunWith; <br />import org.junit.runners.Suite; <br />import org.junit.runners.Suite.SuiteClasses;</p> <p>/** <br />* @author fu <br />* 在类的声明之前进行一个注解,使用runwith suite <br />* 之后就是把我们需要进行的测试的类的类放置到我们的测试suiteclass中去 <br />*/ <br />@RunWith(Suite.class) <br />@SuiteClasses({ <br />&#160;&#160;&#160; UserTeaDaoTest.class <br />})</p> <p>public class MainTest {</p> <p>} <br /></p> </blockquote> <p>以上的注解式的代码同样的是可以实现一个测试的基本的操作的。</p>

转载于:https://my.oschina.net/fuweiwei/blog/171208

你可能感兴趣的文章
HotSpot运行时概览#2
查看>>
Go结构体标签表达式v1.0发布,参数校验杀手锏
查看>>
对react中setState的总结
查看>>
[回炉计划]-实现一个图片预加载
查看>>
正则表达式
查看>>
360前端星计划学习-html
查看>>
专注dApp高效执行和高并发的下一代公有链
查看>>
ONE-sys 整合前后端脚手架 koa2 + pm2 + vue-cli3.0 + element
查看>>
携带更方便功能全 iPone与Apple Watch球形尿袋
查看>>
行为型模式:策略模式
查看>>
实现批量数据增强 | keras ImageDataGenerator使用
查看>>
太忙女友消息未及时回复,分手吗?python微信自动消息帮你谈恋爱
查看>>
Java 多线程NIO学习
查看>>
命名实体识别
查看>>
动态切换的动态代理
查看>>
电商项目(下)
查看>>
寻找一种易于理解的一致性算法(扩展版)下
查看>>
MySQL - 高可用性:少宕机即高可用?
查看>>
2018电影票房分析-谁才是票房之王
查看>>
程序员可以干到多少岁?
查看>>