`
石建武
  • 浏览: 74932 次
  • 性别: Icon_minigender_1
  • 来自: 陕西
社区版块
存档分类
最新评论

测试工作(2.2 -- Junit4)

阅读更多
Junit4.x :依靠Java5的新特性“注解”,结合反射。

A. 静态导入 import static org.junit.Assert.*;
类B静态导入A,则B可直接使用A的静态成员,省略类名。
B. @Test 注解。
C. 测试类完全独立,不再继承任何类。


简单示例:
/**
 * @author shi
 * Junit所有的测试完全是独立的,之间不会相互影响
 */
public class MathDemoTest {
	
	MathDemo demo;
	
	@BeforeClass
	public static void beforeClass() {
		System.out.println("全部测试开始前调用 。。。仅一次");
	}
	
	@AfterClass
	public static void afertClass() {
		System.out.println("测试全部结束后调用 。。。仅一次");
	}
	
	/**
	 * 每个Test测试前执行
	 */
	@Before
	public void init() {
		System.out.println("每个测试start均执行");
		demo = new MathDemo();
	}
	
	/**
	 * 每个Test结束后调用
	 */
	@After
	public void destory() {
		System.out.println("每个测试end均执行");
	}
	
	/**
	 * 测试
	 */
	@Test
	public void testDiv() {
		int expected = 2;
		assertEquals(expected, demo.division(4, 2));
	}
	

	
	/**
	 * 测试异常,期望设置的异常
	 */
	@Test(expected=ArithmeticException.class)
	public void testDivision() {
		assertEquals(1, demo.division(2, 0));
	}
	
	/**
	 * 测试执行时间,若大于这个时间则失败,单位是毫秒
	 */
	@Test(timeout=1) 
	public void testTime() {
		assertEquals(2, demo.division(4, 2));
	}
	
	@Test
	@Ignore
	public void testIgnor() {
		//忽略测试
		System.out.println("忽略测试"); 
	}

}




关键:
1、Junit最佳实践:
A.源代码与测试代码,存放于不同的源码包。
B.测试任何可能的错误。单元测试不是用来证明您是对的,而是为了证明您没有错。

2、测试运行器?Junit4默认的测试运行器?使用@RunWith(RunnerClassName extends <Runner>),指定具体的测试运行器,同样可以自己实现测试运行器。

3、测试套件(suite) :分层管理不同模块的单元测试代码。
@RunWith(Suite.class)
@SuiteClasses({MathDemoTest.class}) //参数为测试类组成的数组
public class TestSuite {}

4、参数化测试
为准备使用参数化测试的测试类指定特殊的运行器 org.junit.runners.Parameterized。
为测试类声明两个变量,分别用于存放期望值expected和测试所用数据target。
为测试类构造测试数据,声明一个使用注解 org.junit.runners.Parameterized.Parameters 修饰的,返回值为java.util.Collection 的公共静态方法,并在此方法中初始化所有需要测试的参数对。
为测试类声明一个带有参数的公共构造函数,参数为expected与target。
编写测试方法,使用定义的变量expected与target作为参数进行测试。


package demo;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class WordDealUtil {

	public String wordFormatForDB(String name) {
		
		Pattern p = Pattern.compile("[A-Z]");
		Matcher m = p.matcher(name);
		StringBuffer sb = new StringBuffer();

		while (m.find()) {
			m.appendReplacement(sb, "_" + m.group());
		}
		return m.appendTail(sb).toString().toLowerCase();
	}

}


package demo;

import java.util.Arrays;
import java.util.Collection;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;

import static org.junit.Assert.*;

@RunWith(Parameterized.class)
public class WordDealUtilTest {

	private WordDealUtil wordUtil;
	
	private String expected;
	private String target;

	
	
	@Before
	public void initMethod() {
		wordUtil = new WordDealUtil();
	}
	
	/*
	 * 定义测试数据
	 */
	@Parameters
	public static Collection words() {
		return Arrays.asList(new Object[][] {
				{ "employee_info", "employeeInfo" }, // 测试一般的处理情况
				{ null, null }, // 测试 null 时的处理情况
				{ "", "" }, // 测试空字符串时的处理情况
				{ "employee_info", "EmployeeInfo" }, // 测试当首字母大写时的情况
				{ "employee_info_a", "employeeInfoA" }, // 测试当尾字母为大写时的情况
				{ "employee_a_info", "employeeAInfo" } // 测试多个相连字母大写时的情况
				});
	}
	
	/**
	* 参数化测试必须的构造函数
	* @param expected 期望的测试结果,对应参数集中的第一个参数
	* @param target 测试数据,对应参数集中的第二个参数
	*/
	public WordDealUtilTest(String expected , String target){
		this.expected = expected;
		this.target = target;
	}
	
	
	/**
	* 测试将 Java 对象名称到数据库名称的转换
	*/
	@Test 
	public void wordFormatForDB(){
		assertEquals(expected, wordUtil.wordFormatForDB(target));
	}


}




参考 :http://www.uml.org.cn/j2ee/200703132.asp(推荐阅读)
分享到:
评论

相关推荐

    JUnit 4测试驱动开发----junit技术讲解

    JUnit 4 是一款广泛应用于Java开发中的单元测试框架,它极大地简化了测试代码的编写和执行。作为Java事实上的标准单元测试库,JUnit 4 的易用性和灵活性使其成为开发者首选的测试工具。本文将深入讲解JUnit 4的关键...

    android-2.2-froyo-src.rar

    "junit"目录包含了JUnit测试框架的部分源码,表明Froyo支持单元测试,开发者可以通过编写JUnit测试用例来验证代码的正确性。 6. **源码学习价值** 分析这些源码不仅有助于理解Android系统的运作原理,也是提升...

    Struts2.2-doc.zip

    3. **易于测试**:通过Mock对象和JUnit,Action类可以很容易地进行单元测试。 缺点: 1. **学习曲线**:对于初学者来说,Struts2的配置和拦截器可能较难理解。 2. **性能影响**:由于依赖于Servlet容器,可能会带来...

    struts2-junit-plugin-2.2.3.1-sources.jar

    struts2-junit-plugin-2.2.3.1-sources.jar

    struts2-junit-plugin-2.2.1.1.jar

    struts2-junit-plugin-2.2.1.1.jar

    struts2-junit-plugin-2.2.3.1.jar

    struts2-junit-plugin-2.2.3.1.jar

    AlumniAssociation-Project2.2-StuckDataBase

    测试是任何软件开发过程中的重要环节,Android Studio提供了各种测试框架,如JUnit和Espresso,帮助开发者编写单元测试和UI测试,确保应用的稳定性和可靠性。在这个项目中,测试代码的编写同样重要,以验证功能的...

    java软件工程:系统测试报告文档-测试工具:JMeter、Junit、Selenium

    列出被测软件工作环境、包括网络环境、支持系统软件、应用软件、接口口、对测试数据的需求。 2.5测试人员要求 2.6测试标准 3.测试计划 4.测试过程及用例 4.1白盒测试用例(JUNIT) 语句覆盖 条件覆盖 … 基本路径...

    测试员速成-单元测试

    ##### 2.2 测试的内容 单元测试通常包括以下内容: - **边界条件**:测试输入数据的各种边界值。 - **异常处理**:验证异常情况下的处理逻辑。 - **路径覆盖**:确保测试覆盖所有可能的执行路径。 - **接口测试**...

    Junit5用户文档

    - **JUnit Vintage**:兼容旧版本的JUnit测试,确保可以运行JUnit3和JUnit4的测试。 **1.2 支持的Java版本** JUnit5支持从Java 8到最新的Java版本,这使得开发人员可以根据项目需求选择合适的Java版本进行开发。 ...

    Junit + Hamcrest + Mockito 单元测试 Jar包

    JUnit支持注解,如@Test,可以标记测试方法,@Before和@After可以定义在每个测试前后的准备工作和清理工作。此外,JUnit还提供了各种断言方法,如assertEquals和assertTrue,用于检查代码的实际行为是否符合预期。 ...

    junit5-demo:JUnit 5的演示

    为了证明对JUnit Jupiter中的assertAll() (即,分组的断言)的支持,而对于JUnit 4中缺少对分组的断言的支持,某些测试有意地失败。其他测试有意地未能证明@SkipOnFailuresInEnclosingClass扩展的功能。

    eclipse中Junit的配置

    ##### 2.2 创建JUnit测试 完成了JUnit的类路径配置之后,接下来可以开始创建JUnit测试。 1. **创建Java项目**: - 在Eclipse中选择`File -&gt; New -&gt; Project`。 - 选择`Java Project`,并点击`Next`。 - 输入项目...

    单元测试(Junit,selenium)

    ##### 2.2 JUnit 4 JUnit 4在此基础上进行了重大改进,引入了注解机制,使得测试编写变得更加灵活和简洁。 - **注解**:JUnit 4使用注解(如`@Test`、`@Before`、`@After`)来定义测试方法和生命周期钩子,极大地...

    Junit_commonly_used_notes.pdf

    JUnit 4引入了Annotation机制,极大地简化了测试用例的编写。 ##### 9.1 基本元数据 - **@Test**:标记一个方法为测试方法。 - **@Before**:在每个测试方法之前执行的方法。 - **@After**:在每个测试方法之后...

    Junit5用户手册

    尽管JUnit5与JUnit4不完全兼容,但仍然可以使用JUnit4来运行JUnit5的测试。 **4.5 配置参数** 介绍了如何配置JUnit5的运行参数,以适应不同的测试需求。 #### 五、扩展模型 **5.1 概览** 扩展模型是JUnit5的一...

Global site tag (gtag.js) - Google Analytics