在junit3.8中,测试方法满足如下原则:
1)public的
2)void的
3)无方法参数
4)方法名称必须以test开头
5)继承自TestCase
出名的语句:keep the bar green to keep the code clean
测试一个方法会在某种情况下抛出异常的方法:
public void testDivide2()
{
Throwable tx = null;
try
{
Calculator cal = new Calculator();
cal.divide(3,0);
Assert.fail(); //Junit程序执行到这个语句时会直接终止testCase的往下执行,用来验证不会执行到这个语句
}catch(Exception e)
{
tx = e;
}
Assert.assertNotNull(tx);
Assert.assertEquals(Exception.class , tx.getClass());
Assert.assertEquals("除数不能为0" , tx.getMessage());
}
public void testDivide1()
{
int result = 0;
try
{
Calculator cal = new Calculator();
result = cal.divide(6,4);
}catch(Exception e)
{
Assert.fail(); //Junit程序执行到这个语句时会直接终止testCase的往下执行,用来验证不会执行到这个语句
}
Assert.assertEquals(1 , result);
}
千万不要将要测试的方法抛出的异常在TestCase中不捕获,继续往上抛
public void testDivide2() throws Exception //不要这样写测试用例
不要写重复的代码(Don't Repeat yourself)
setUp方法是在每一个TestCase执行之前都会执行的方法,而tearDown是每一个TestCase执行之后都会执行的方法
那么有没有一种方法是在所有的TestCase执行之前执行,并且只执行一次,又有没有另一种方法是在所有的TestCase执行完后再执行的呢?在JUnit3.8里是没有提供这样的方法的,但在JUnit4中已经支持了这种方法
用命令行的方式执行TestCase:
不用Eclipse等工具时,TestCase应该怎样去运行呢?
1、命令行方式(适用于和ant整合)
public static void main(String[] args)
{
junit.textui.TestRunner.run(CalculatorTest.class);
}
2、swing图形化的方式
public static void main(String[] args)
{
junit.swingui.TestRunner.run(CalculatorTest.class);
}
3、awt图形化的方式
public static void main(String[] args)
{
junit.awtui.TestRunner.run(CalculatorTest.class);
}
如何一次运行多个TestCase类??
public class TestAll extends TestCase
{
public static Test suite()
{
TestSuite suite = new TestSuite();
suite.addTestSuite(CalculatorTest.class);
suite.addTestSuite(LargestTest.class);
return suite;
}
}
public static Test suite()也是类型于TestCase一样可以直接运行的方法,运行它就可以一次性将多个TestCase类一次性运行了
public static Test suite()这个方法的签名是固定的,不能有任何改变
TestSuite里不仅可以包含TestCase测试类,还可以包含TestSuite测试类,如有另一个类有如下语句将上面的suite包含在一起:
suite.addTestSuite(TestAll.class);
suite.addTestSuite(OtherSuite.class);
这里使用了组合模式
Junit4
不需要继承自TestCase
setUp的功能在4中是使用@Before来达到,相应的tearDonw使用@After,而在所有的Testcase执行之前执行并且仅仅执行一次的方法使用@BeforeClass注解相应的也有@AfterClass
测试抛异常的方法:
@Test(expected = Exception.class)
public void myDivide2() throws Exception
{
cal.divide(1 , 0 );
}
上面的程序表示方法内的语句必须抛出一个Exception异常,该TestCase才会被认为通过,且这时不能再像上面的junit3一样,在程序内把它捕获,捕获后就不再往上抛了,也就会被认为没有通过。
@Test(timeout = 100)
表示TestCase的执行不能超过100毫秒
在使用junit4时,使用Assert断言时,eclipse有时会导入junit3的Assert类!!!
当某个用例还没有实现完毕或者还不太完善,但又不想影响其它用例的执行,可以使用@Ignore来注解该用例,当执行该类时就不会执行这个用例了
运行多个测试类
@RunWith(Suite.class)
@SuiteClasses(ATest.class, BTest.class, CTest.class)
public class ABCSuite {
}
ABCSuite类里面不用写任何东西都可以
@SuiteClasses这里放的依然是可以为Suite类
一个技巧:
可以在每一个包下创建一个suite类,将该包下的所有的测试用例包含进来,然后再有一个总的suite类,它将每一个包下的suite类包含进来,要执行所有的测试用例时就可以只运行这个总的suite类就可以了
一个测试用例里不推荐有多个断言,如要测试一个加法方法,不应该把测3+2和4+8放在同一个用例里,但这种问题怎样来解决呢?看下面:
参数化测试要点:
1. 测试类必须由Parameterized测试运行器修饰
2. 准备数据。数据的准备需要在一个方法中进行,该方法需要满足一定的要求:
1)该方法必须由Parameters注解修饰
2)该方法必须为public static的
3)该方法必须返回Collection类型
4)该方法的名字不做要求
5)该方法没有参数
@RunWith(Parameterized.class)
public class FibonacciTest {
@Parameters
public static Collection data() {
return Arrays.asList(new Object[][] { { 0, 0 }, { 1, 1 }, { 2, 1 },
{ 3, 2 }, { 4, 3 }, { 5, 5 }, { 6, 8 } });
}
。。
例子
@RunWith(Parameterized.class)
public class ParameterTest
{
private int expected;
private int input1;
private int input2;
public class FibonacciTest {
@Parameters
public static Collection data() {
return Arrays.asList(new Object[][] { {0, 0, 0 }, { 2,1, 1 }, {3, 2, 1 },
{ 5,3, 2 }, {7, 4, 3 }, {10, 5, 5 }, { 14,6, 8 } });
//数据的构造为0=0+0 , 2 =1+1,3=2+1...
}
public ParameterTest(int expected , int input1,int input2)
{
this.expected = expected;
this.input1 = input1;
this.input2 = input2;
}
@Test
public void testAdd()
{
Calculator cal = new Calculator();
assertEquals(expected , cal.add(input1,input2));
}
}
测试私有方法----用反射
int.class == Integer.TYPE int 获取int对应的class对象
Integer.class 获得Integer对应的class对象
分享到:
相关推荐
本篇笔记将带你进入JUnit与NetBeans的结合使用世界,让你在NetBeans中更高效地进行单元测试。 首先,我们需要安装JUnit库到NetBeans。在NetBeans中,打开“工具”菜单,选择“库”,然后点击“新建库”。在弹出的...
"Junit良葛格学习笔记"很可能包含了一系列关于如何有效利用JUnit进行测试的教程和示例。下面将详细阐述JUnit的核心概念、功能以及在实际开发中的应用。 1. **JUnit简介**: JUnit是由Ernst Leiss和Kent Beck开发的...
这篇复习笔记将深入探讨JUnit的核心概念、功能和最佳实践,以帮助你更好地理解和运用这个强大的工具。 一、JUnit简介 JUnit是开源项目,由Ernst Konig和Kent Beck开发,遵循MIT许可协议。它基于Java,提供了丰富的...
本笔记主要针对初学者,旨在提供一个全面且实用的学习路径,帮助读者快速掌握Java编程基础。 首先,让我们从Java的基础知识开始。Java语言的基础包括变量、数据类型、运算符、控制结构(如if语句、for循环和while...
【CXF Webservice初学笔记】 Apache CXF 是一个开源的Web服务框架,它使得开发者可以轻松地创建和部署Web服务。本笔记将探讨CXF的基本概念、如何使用CXF构建Webservice以及与之相关的技术栈,如Spring、Struts2等。...
1. **JUnit介绍**:首先会介绍JUnit的基本概念,包括它的起源、目标以及在软件开发中的地位,以及与其它测试框架的比较。 2. **环境配置**:如何在Java开发环境中设置JUnit,包括Maven或Gradle项目的依赖配置,以及...
虽然它已不再维护,但其代码库仍能为我们揭示iOS应用开发的一些关键知识点,尤其是对于初学者和希望了解iOS开发的人来说,这是一个宝贵的资源。 一、Swift编程语言基础 懒人笔记是用Apple的Swift编程语言编写的。...
### Maven初学笔记 #### Maven概述 **Apache Maven** 是一款功能强大的软件项目管理和综合工具。它基于项目对象模型(Project Object Model, POM)的概念,能够从一个中心信息源管理项目的构建、报告以及文档。这...
笔记会列出一系列Eclipse的常用快捷键,如代码编辑、重构、查找替换等操作,帮助开发者快速进行代码编写和修改。 4. **JUnit测试框架** JUnit是Java编程语言中的一个单元测试框架,用于编写和运行可重复的测试。...
总的来说,"java全套培训笔记"是一份全面的学习资料,无论你是初学者还是有一定经验的开发者,都能从中受益。通过系统学习和实践,你将能够掌握Java编程的各个方面,从而在IT行业中立足并取得成功。
【云笔记资源代码】是一个基于Java语言开发的项目,旨在为用户提供一个简易的网页版笔记应用,方便用户存储和修改信息。这个项目对于初学者来说是一个很好的起点,可以帮助他们理解和实践Web应用程序的基本构建块。 ...
本学习笔记主要针对J2EE初学者,将涵盖以下关键知识点: 1. **Java基础**:首先,理解Java编程语言的基本概念,包括类、对象、接口、继承、多态和异常处理,这些都是J2EE开发的基础。 2. **Servlet和JSP**:...
【懒人笔记 源码】是一份专为那些希望深入了解笔记应用开发的开发者准备的源代码资源。...对于初学者,这是一个很好的学习资源,而对于经验丰富的开发者,这可能是一个改进现有项目或创新新功能的启示。
【宋红康java笔记】是一份综合性的Java学习资料,由知名编程教育者宋红康编撰。这份压缩包文件包含了大量的Java编程知识点,旨在帮助初学者和有经验的开发者深入理解和掌握Java语言的核心概念与高级特性。以下是根据...
【标题】"仿win笔记本项目源码"是一个Java编程项目,旨在模仿Windows操作系统的笔记应用程序。这个项目可能是为了教学目的而设计的,帮助初学者理解如何构建类似桌面应用的界面和功能,使用Java语言实现。 【描述】...
《Android第一行代码笔记》是针对初学者的Android开发指南,涵盖了从基础知识到实际应用的全方位内容。在学习Android开发的过程中,"第一行代码"往往代表着编程旅程的起点,这本笔记将帮助读者逐步理解并掌握这个...
这份笔记旨在帮助初学者和有一定经验的开发者深入理解和掌握Java语言的核心概念、语法以及常见应用。以下是笔记中可能涵盖的一些关键知识点: 1. **Java基础**:学习Java首先会涉及基本语法,如变量、数据类型、...
在Android开发中,创建一个简易的笔记应用是初学者常常会遇到的任务,也是进阶开发者巩固基础知识的良好实践。本项目源码提供了这样一个平台,帮助开发者理解Android应用的基本架构和核心功能实现。 1. **应用结构*...
【云笔记项目】是2015年7月在达内教育机构完成的一个毕业设计,旨在为初学者提供一个实践平台,尤其是对于刚开始接触Java编程的开发者。这个项目的核心目标是构建一个云端记事本应用,它允许用户创建、编辑、存储和...