在项目中怎么用junit写单元测试用例

作者&投稿:冯闸 (若有异议请与网页底部的电邮联系)
java spring项目的controller层的代码怎么用junit写单元测试用例~

springboot与Junit有整合的方式,你可以模拟http请求从你的测试类发送请求到Controller,就像https://www.youyanpai.com/2018/springboot-test-with-junit4.html中描述的一样。下面我列出部分代码:
package com.youyanpai;import org.junit.Assert;import org.junit.Before;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.test.context.junit4.SpringRunner;import org.springframework.test.web.servlet.MockMvc;import org.springframework.test.web.servlet.MvcResult;import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;import org.springframework.test.web.servlet.setup.MockMvcBuilders;import org.springframework.web.context.WebApplicationContext;@RunWith(SpringRunner.class)@SpringBootTest(classes = Application.class)public class SimpleTest {private MockMvc mockMvc; @Autowired private WebApplicationContext webApplicationContext; /** * 前置处理 * @author 有言派 * @author www.youyanpai.com */@Before public void before() throws Exception { mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build(); }/** * 测试方法 * @author 有言派 * @author www.youyanpai.com */@Test public void testYourMethod() throws Exception { MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.get("/login") .param("username", "youyanpai.com") .param("password", "youyanpai.com") .session(session)) .andReturn(); int status = mvcResult.getResponse().getStatus(); String responseString = mvcResult.getResponse().getContentAsString(); //请求是否正确 Assert.assertEquals("请求错误", 200, status); //输出返回值 System.out.println("有言派提示您,测试返回结果:"+responseString); }}希望能够帮到你!

@Test

@ContextConfiguration(locations = { "/applicationContext.xml" })
@TransactionConfiguration(defaultRollback = false)

public class CatTest extends SpringTxTestCase{

@Autowired
private CatServiceImpl catServiceImpl;

@Test
public void testCat() throws Exception{
Cat cat = catServiceImpl.findById(1);
System.out.println(cat.getName());
}
}

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

  使用简单的 @Test 注解实现我们的测试方法的编写和执行
  准备工作做好之后,接下来我们就可以开始尝试编写壹个简单的测试代码了。首先,我们编写了壹个 Calculator 类,并提供五个方法分别完成加减乘除以及求平方的运算。代码如下:

  package net.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就是org.junit.*。把它包含进来之后,绝大部分功能就有了。还有一句话也非常地重要“import static org.junit.Assert.*;”,我们在测试的时候使用的壹系列assertEquals()方法就来自这个包。大家注意壹下,这是壹个静态包含(static),是JDK5中新增添的壹个功能。也就是说,assertEquals是Assert类中的壹系列的静态方法,壹般的使用方式是Assert. assertEquals(),但是使用了静态包含后,前面的类名就可以省略了,使用起来更加的方便。
  另外要注意的是,我们的测试类是壹个独立的类,没有任何父类。测试类的名字也可以任意命名,没有任何局限性。所以我们不能通过类的声明来判断它是不是一个测试类,它与普通类的区别在于它内部的方法的声明,我们接着会讲到。在测试类中,并不是每壹个方法都是用于测试的,所以我们必须使用“注解”来明确表明哪些是测试方法。“注解”也是JDK5的壹个新特性,用在此处非常恰当。我们可以看到,在某些方法的前有@Before、@Test、@Ignore等字样,这些就是注解,以壹个“@”作为开头。这些注解都是JUnit4自定义的,熟练掌握这些注解的含义,对于编写恰当的测试类非常重要。

  接下来我们创建壹个测试类 CalculatorTest.java,代码如下:

  package net.oschina.bairrfhoinn.test;
  import static org.junit.Assert.*;
  import org.junit.Test;
  import net.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 中先写如下测试代码:

  package net.oschina.bairrfhoinn.test;
  import static org.junit.Assert.*;
  import org.junit.Ignore;
  import org.junit.Test;
  import net.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 来标注它,如下例子所示:

  package net.oschina.bairrfhoinn.test;
  ...
  import org.junit.After;
  import org.junit.Before;
  import org.junit.Ignore;
  import org.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 是定义在 org.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来运行你的代码。换句话说,下面两段代码含义是完全壹样的:

  import org.junit.runner.RunWith;
  import org.junit.runners.JUnit4;
  @RunWith(JUnit4.class)
  public class CalculatorTest {
  ...//省略此处代码
  }
  //用了系统默认的JUnit4.class,运行效果完全壹样
  public class CalculatorTest {
  ...//省略此处代码
  }
  

测试是测试哪一块的,叫我用junit 写一个方法测试一两个简单的方法还可以,但是在项目 里,action 调service,service 又调dao 的,那我用Junit 写测试方法 的时候,是应该测 哪个地方的啊,是service 还是dao 这边的啊,麻烦有用过的说哈啊,这两天要写,不知道 ------解决方案-------------------------------------------------------- 在我看来,junit 不仅仅是个测试工具,可以算得上是一个设计工具了:)它可以检验你的接 口设计是否足够简单清晰。 既然你用了spring,那么依赖注入就不用多说,只要可以注入的地方,都可以拆分出来,逐一测试。 A 依赖于 B , 测试A:写一个实现B 接口的Mock,人为控制接口方法的返回数据,注入A,观察A 的反应。 测试B:如果B 足够简单,测试。 如果B 依赖于C,同A 流程。 ------解决方案-------------------------------------------------------- service 里调用dao 测试的时候直接测试service 就可以了,我们项目是这样做的。 ------解决方案--------------------------------------------------------


eclipse如何打jar包
在Eclipse中,我们就可以使用这个jar包了。基本思路在eclipse中添加JAR程序包,一般通过 Add External Achieves的方式导入的操作方法1右键你的工程目录2点击Build Path 3选择Add External Achieves4然后选择你要放入的jar包,路径d\\com\\jun\\;步骤如下1右键点击你需要添加jar包的项目2选择“Properties”3然后...

首次曝光jun工最先进wu器!
单一个字头的项目量都是你想象不到的浩淼和庞杂,比如射线武器属于863计划7字头内容,神州的X个舱,大气层外\\内KKV,以及射线武器等等。我们的863计划走的是一条跨越式发展的道路,与其跟着跑,不如学蛙跳式跳到新的制高点与别人同步甚至更早的研究!这里要感谢大师们的超前思维!!!但是,没能跟着跑...

如何在eclipse中添加JAR程序包
基本思路:在eclipse中添加JAR程序包,一般通过 Add External Achieves…的方式导入的。操作方法:1、右键你的工程目录。2、点击Build Path 。3、选择Add External Achieves…。4、然后选择你要放入的jar包,路径d:\\com\\jun\\www\\STUDY.jar,也就是你问题中提供的路径,再点击确定即可。我这里演示的有7...

陈利国的科研项目
1.人血清瘦素水平与血瘀证形成关系的研究 山东省自然科学基金课题 1999.12-2002.12(批准号:Q99C02)(3.5万元)2.C—fos、c—jun和HSP70在血瘀证患者白细胞中的表达 国家中医药管理局基金课题 2000.12-2003.122(批准号:2000-J-B-18)(5万元)3.血管内皮细胞粘附因子水平与血瘀证形成关系的...

如何把项目管理的思想和方法运用到生活中
gujun19911107 | 浏览1030 次 |举报 我有更好的答案推荐于2017-12-15 12:43:17 最佳答案 运用到生活中去还是工作中去呢?项目管理是基于被接受的管理原则的一套技术方法,这些技术或方法用于计划、评估、控制工作活动,以按时、按预算、依据规范达到理想的最终效果。管理的S四个步骤分别是Plan(计划)、Do(执行)...

我显示了隐藏的系统文件,发现每个分区下均有JUN.EXE和autorun.inf,怎么...
1、结束进程jun.exe 2、依次删除:C:\\WINDOWS\\system32\\jun.exe C:\\WINDOWS\\system32\\oeminfo.ini C:\\WINDOWS\\system32\\oemlogo.bmp 将各盘符下的autorun.inf,jun.exe删除 3、删除注册表启动项目:[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Run]<jun><c:\\windows\\system32\\jun....

技术路线用英语怎么说?
论文里面技术路线图 Technical roadmap in the paper 问题二:校级科研立项用英文怎么说(当然校级,是指大学这个 为贯彻落实《教育部财政部关于实施高等学校本科教学质量与教学改革工程的意见》(教高〔2007〕1号)和《教育部关于进一步深化本科教学改革全面提高教学质量的若干意见》(教高〔2007〕2号)精神,不断提高大...

用excel进行项目财务评价
净现值仝花_Xt%k-o(1+i)冋(1+i)式中:n—资涉及的年限Ik—第k年的现金流入iftOk—架k年的现金流出就I—预定的贴现率用EXCEL计算净现值的方法:采JUNPV()数.该曲数NPV(rate・value1.value?-*)参数:Rate为某一期间的贴现率Value!-\\^lue2……分别表示第•期.第二期……发生...

dal三层开发(软件项目开发)
DAL,即数据访问层,是软件项目开发中重要的一个部分,它主要负责与原始数据的交互,无论是数据库还是文本文件等数据存储形式。数据访问层的主要任务是对数据进行操作,而不是直接处理数据库本身,它的存在是为了为业务逻辑层和表示层提供数据服务。在传统的三层架构中,有三个主要的层次:1. 表示层(USL...

丁克峰的科研项目:
4. SNC19在大肠癌肝转移中的作用及转移相关功能蛋白的筛检:国家自然科学基金,排名第一。项目批准号:30200325。资助金额:22.00万元。2003.1-2005.12.5. 参加的科研课题项目:大肠肿瘤的早期诊断和早期治疗(国家八五、九五攻关项目,负责海宁现场高危人群的全面纤维肠镜普查)。6. 腹腔镜辅助直肠癌根治术可行性的临床研究:...

贞丰县18956449323: 如何使用junit4写单元测试用例 -
萧龙维乐: 我们在编写大型程序的时候,需要写成千上万个 方法或函数,这些函数的功能可能很强大,但我们在程序中只用到该函数的一小部分功能,并且经过调试可以确定,这一小部分功能是正确的.但是,我们同时应该 确保每一个函数都完全正确,...

贞丰县18956449323: 怎样使用 Junit Framework 进行单元测试的编写 -
萧龙维乐: 1. 单元测试的编写原则 Junit 附带文档所列举的单元测试带有一定的迷惑性,因为几乎所有的示例单元都是针对某个对象的某个方法,似乎 Junit 的单元测试仅适用于类组织结构的静态约束,从而使初学者怀疑 Junit 下的单元测试所能带来的效果.

贞丰县18956449323: java junit单元测试怎么写 -
萧龙维乐: package com.yuanqi.zfb.test;import org.junit.Test;import com.yuanqi.zfb.util.VerifyCodeUtils;public class Atest { @Testpublic void test(){String verifycode =VerifyCodeUtils.generateVerifyCode(8);System.out.println(verifycode);}@Test...

贞丰县18956449323: 如何进行进行junit单元测试 -
萧龙维乐: 编写测试用例,Junit4支持注解了,只要在要执行的方法前加@Test即可,如:@Test public void multiplyPoundsByInteger() {assertEquals( 10, 5 ); } Junit4增加了许多特性,主要是支持注解了:测试由原来的命名模式改变注解,即testXXX变为@...

贞丰县18956449323: 如何使用junit进行单元测试面试题 -
萧龙维乐: 1、在Eclipse中对所要做测试的代码所在工程,添加JUnit4.0的JAR包.2、在工程中,使用Eclipse的新建向导,对所要测试的代码文件,进行新建对应的JUnit类.3、如果测试时需要有前提条件或者事后处理的话,要将相应的处理内容写在before和after方法中.4、针对要测试的类,类中的public方法,写对应的测试方法.5、测试代码写完编译没有问题之后,执行测试类.可以在控制台上看到执行的测试结果.

贞丰县18956449323: Eclipse中怎么使用junit测试 -
萧龙维乐: 在Eclipse中配置Junit的方法有两种方式:第一种方法:1、下载junit的jar包,目前它的版本是junit3.8.12、在要使用Junit的project名上,点击properties--java build path-libraries, 点击Add External JARs,把Junit包点上就行了 点击Add External...

贞丰县18956449323: eclipse怎么使用junit测试方法 -
萧龙维乐: 网上下载一个JUnit包,后缀名为 jar . 打开eclipse ,新建项目,项目建好后在项目名称上单击鼠标右键,选择build path-->Config build path ,在properties for....窗口中左边选择Java Build Path 右边选择Libraries, 再点击Add External Jars .找到...

贞丰县18956449323: 如何使用junit3进行程序测试 -
萧龙维乐: 步骤一:构建环境 1 首先新建一个java project.,名字叫做junit3.在拘泥t中再构建一个source folder.目的是形成良好的变成风格.将源码放在src中将测试代码发在另一个source folder(名字叫做test)中. 形成的目录结构如图. 2 在src中和test...

贞丰县18956449323: 如何使用eclipse进行junit测试 -
萧龙维乐: 现在的eclipse都是集成了junit单元测试的,可以新建项目后build path里add libraries.把junit添加进去.打开eclipse,点击左上角的File,新建一个project,然后在src目录下新建两个包,测试和被测试,分别建立测试类和被测试类,在测试类需要测试的地方写上注解(相关的可以百度系统学习下junit),右键选择Run As,再选择Junit Test,即可运行junit.

贞丰县18956449323: 在eclipse中使用junit4进行单元测试需要配置文件吗 -
萧龙维乐: 不需要.在测试类中引入JUnit4后,在测试方法前加@Test就可以了.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网