最近这几天正在学习
junit
,
junit
在我们日常的开发工作会发挥很大的作用,但是在使用
junit
的过程中如何写出正确的测试用例,也是一个很有技巧的事情,有的时候对于一个类中的某个方法写测试用例,一个方法要写出几个测试用例,这样才能保证从各个方面对于该方法做出测试,保证程序的正确性。
同时,现在的
junit
也出现了分裂的局面,比较重要的两个版本是
junit3.8
和
junit4.X
,这两个版本中
junit
的实现和使用都存在着很大的区别,其中
junit4.X
中主要是使用
Annotation
来实现,现在主要介绍
junit3.8
的使用:
Largest.java
这个类中的
getLargest
方法主要是获取一个整型数组中的最大值:
package com.junit;
/**
*
*
<p>
*
Title:
获取一个整形数组中最大的数
*
</p>
*
<p>
*
Description:
*
</p>
*
@version 1.0
*
@author
董宗磊
*
@date 2012-2-9
*/
public class Largest {
public
int getLargest(int array[]) throws Exception{
if(null
== array || 0 == array.length){
throw
new Exception("
数组不能为空
");
}
int
result = array[0];
for
(int i = 0; i < array.length; i++) {
if(result
< array[i]){
result
= array[i];
}
}
return
result;
}
}
LargestTest.java
中的方法用来测试
Largest.java
中的
getLargest
方法的正确性:
package com.junit;
import junit.framework.Assert;
import junit.framework.TestCase;
/**
*
*
<p>
*
Title: Largest
类的
junit
测试类
*
</p>
*
<p>
*
Description:
*
</p>
*
@version 1.0
*
@author
董宗磊
*
@date 2012-2-9
*/
public class LargestTest extends TestCase {
private
Largest largest;
@Override
public
void setUp(){
largest
= new Largest();
}
/**
*
测试正常执行结果是否正确
*/
public
void testGetLargest(){
int
array[] = {10,29,89,37,76};
int
result = 0;
try
{
result
= largest.getLargest(array);
}
catch (Exception e) {
Assert.fail("
测试失败
");
}
assertEquals(89,
result);
}
/**
*
测试数组内没有内容时的异常情况
*/
public
void testGetLargest2(){
Throwable
tw = null;
int
array[] = {};
try
{
largest.getLargest(array);
Assert.fail("
测试失败
");
}
catch (Exception e) {
tw = e;
}
Assert.assertNotNull(tw);
Assert.assertEquals(Exception.class,
tw.getClass());
Assert.assertEquals("
数组不能为空
", tw.getMessage());
}
/**
*
测试数组为空的异常情况
*/
public
void testGetLargest3(){
Throwable
tw = null;
int
array[] = null;
try
{
largest.getLargest(array);
Assert.fail("
测试失败
");
}
catch (Exception e) {
tw = e;
}
Assert.assertNotNull(tw);
Assert.assertEquals(Exception.class,
tw.getClass());
Assert.assertEquals("
数组不能为空
", tw.getMessage());
}
public
static void main(String[] args) {
junit.textui.TestRunner.run(LargestTest.class);
junit.awtui.TestRunner.run(LargestTest.class);
junit.swingui.TestRunner.run(LargestTest.class);
}
}
在这个
junit
的测试类中我们只是对于一个类中的一个方法进行测试,其中
testGetLargest
方法主要测试在正常的情况,数组存在且不为空的情况下是否可以正确的查找出数组中最大的那个数;
testGetLargest2
这个方法主要测试在数组存在但是数组中没有内容的情况下,是否可以正常的抛出异常;
testGetLargest3
这个方法中主要是测试数组为空的情况下是程序是否可以正常的抛出异常。通过这个小程序我们可以看出,我们只是写一个很小的应用,但是却要对这个方法写出三个测试方法进行全面的测试,所以从这里我们可以看出,编写测试用例也是一项工作量很大的事情。
对于使用
junit3.8
编写测试用例的时候需要有几点需要注意的事情:
1)
编写的测试方法需要以
test
开头,这样
junit3.8
就可以识别这是一个测试方法,执行测试程序,如果不以
test
开头则
junit
默认不会当做测试方法来执行。
2)
编写的测试方法不能带有参数。
3)
编写的测试方法不能有返回值,返回值为
void
。
4)
编写的测试方法应该是
public
。
5)
编写的测试类必须要继承于
TestCase
父类
以上这几条规则是
junit3.8
中一些强制性的规定,但是我们在使用
junit3.8
时还有一些最佳的实践,这些虽不是
junit3.8
的强制性规定,但是却可以提高我们的工作效率:
1)
新建一个名为
test
的
source folder
,用于存放测试类源代码
2)
目标类与测试类应该位于同一个包下面,这样测试类中就不必导入源代码所在的包,因为他们
位于同一个包下面
3)
测试类的命名规则:假如目标类是
Calculator
,那么测试类应该命名为
TestCalculator
或者是
CalculatorTest
分享到:
相关推荐
在本文中,我们将深入探讨JUnit3.8的基础知识,了解其核心概念、用法以及如何在实际项目中应用。 首先,我们来理解什么是单元测试。单元测试是一种软件开发方法,它允许开发者独立地测试程序的各个小部分,即“单元...
JUnit3.8是Java编程语言中广泛使用的单元测试框架的第三个主要版本,它为开发者提供了一种方便的方式来编写和执行可重复的、自动化的单元测试。这个版本在JUnit的早期版本基础上进行了改进,增强了测试的功能性和...
2. **注解(Annotations)**:在Junit 3.8中,注解尚未被引入,所以测试类和方法通常使用`public static void testXXX()`的约定。例如,`public static void testAddition()`表示一个加法测试。 3. **断言(Assertions...
尽管JUnit 3.8的功能相对有限,但它奠定了后续版本的基础,例如JUnit 4引入了更强大的注解系统和参数化测试等特性。对于初学者来说,理解JUnit 3.8的基本概念和用法,可以帮助他们更好地过渡到更新的版本。 在提供...
JUnit是Java编程语言中最...总结来说,JUnit 4通过注解和更多的灵活性提升了测试体验,而JUnit 3.8则相对基础和传统。随着Java开发的不断进步,理解并熟练运用不同版本的JUnit API对于保证代码质量和可维护性至关重要。
JUnit3.8 默认使用的是 `DefaultTestRunner`,它负责执行测试方法。你可以自定义测试运行器,但这个特性在后续版本中得到了更丰富的扩展。 5. **异常测试**: 使用 `assertThrows()` 或 `expected` 属性可以测试...
然而,需要注意的是,JUnit 3.8.2相对较老,现代项目通常会使用更新的版本,如JUnit 4或JUnit 5,它们引入了更多的特性,如参数化测试、更灵活的注解和更好的错误报告。 总的来说,JUnit 3.8.2是Java开发中单元测试...
JUnit是Java编程语言中最常用的单元测试框架之一,主要用于软件开发过程中的测试,确保代码的正确性和稳定性。...尽管如此,对于学习测试基础或者维护旧项目时,理解JUnit 3.8.1及其工作原理仍然是很重要的。
理解并掌握JUnit的基本概念和使用方法对于任何Java开发者来说都是至关重要的,尤其是在维护旧项目或学习测试基础时。随着技术的发展,了解不同版本的特性有助于更好地适应不同的开发环境和需求。
这个“Junit学习.rar”压缩包显然包含了关于JUnit从3.8到4.9版本的学习资料,包括可能的操作手册、教程文档以及个人的学习笔记。以下是基于这些资源可能涵盖的一些关键知识点: 1. **JUnit基础知识**:了解JUnit的...
- 进入 JUnit 3.8 目录,可以使用命令行来启动 JUnit 的文档窗口。 - `java -classpath junit.jar;.; junit.swingui.TestRunner junit.tests.AllTests` - 或者直接使用: - `java junit.swingui.TestRunner` ###...
- **JUnit Platform**:这是整个JUnit5的基础,负责管理测试引擎和执行测试。 - **JUnit Jupiter**:提供了新的编程模型和API,用于编写和执行基于JUnit5的新特性(如动态测试、重复测试等)。 - **JUnit Vintage**...
二、Junit3.8中的断言和Assert类 在Junit 3.8版本中,`Assert`类提供了多种方法来进行断言检查: 1. **Assert.assertEquals()**:比较两个对象或值是否相等。在本实验中,如`Assert.assertEquals(3, result)`,...
测试环节,可以使用JUnit进行单元测试,验证单个函数或方法的正确性;对于接口和页面,可以利用MockMvc进行模拟请求测试;对于数据库操作,可以编写SQL查询验证数据的正确存储和读取。最后,通过Maven的deploy阶段,...
3. poi-3.8-beta2-20110408.jar:主Apache POI库,提供了与Excel文件交互的基础功能。 4. poi-scratchpad-3.8-beta2-20110408.jar:包含了POI项目的一些实验性或未成熟的功能。 5. poi-ooxml-3.8-beta2-20110408.jar...
如果项目使用的是较新的Java版本,那么迁移到JUnit 4或JUnit 5可能是更好的选择,因为它们提供了更多的功能和改进。 总的来说,JUnit 3.8.1是Java开发者进行单元测试的一个基础工具,尽管它现在已被更新的版本所...
在本文中,我们将深入探讨如何使用JUnit 3.8 版本来实施针对MK23的测试。 JUnit的核心组件包括四个关键类:TestSuite、TestCase、TestResult和TestRunner。其中,TestCase是所有测试用例的基础,它提供了一种组织和...
这个3.8.2版本的JUnit是一个较早的版本,但仍然在一些老项目中使用。本文将深入探讨JUnit 3.8.2的核心概念、功能以及如何使用其jar包和源码进行开发。 **JUnit 3.8.2核心概念:** 1. **Test Case**: JUnit的基础是...
相比于JUnit 3.8,JUnit 4引入了许多新特性,包括注解支持、参数化测试等,这些新特性使得测试更加灵活和强大。 - **注解**:JUnit 4使用注解来标识测试方法,例如`@Test`、`@Before`、`@After`等,取代了JUnit 3中...