- 浏览: 41781 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (76)
- Dojo 组件 (1)
- 数据库 (7)
- Maven (3)
- 负载均衡 (4)
- Java (12)
- 多线程 (4)
- Spring (3)
- Java缓存 (3)
- 高并发 (3)
- 热部署 (2)
- 大数据 (3)
- 分布式 (1)
- Linux (4)
- 云计算 (1)
- Eclipse (2)
- Tomcat (2)
- Shell (1)
- Python (1)
- 测试 (3)
- 算法与数据结构 (1)
- 设计模式 (1)
- JQuery (1)
- Nginx (1)
- 开发工具 (7)
- JMS (2)
- CI 持续集成 (2)
- Java UI (0)
- UI (1)
- Jenkins (1)
- Ibatis (1)
- Hadoop (1)
- Zookeeper (1)
- Redis (1)
什么是 JUnit ?
JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(
regression testing framework)。Junit测试是程序员测试,即所谓
白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完
成什么样(What)的功能。Junit是一套框架,继承TestCase类,就可
以用Junit进行自动测试了。
JUnit的4大功能?
管理测试用例TestSuite
定义测试代码TestCase
定义测试环境
检验测试结果
测试类别?
CI (静态方法测试TU、动态方法测试TI、系统测试TS)
测试数据?
真实数据库数据、内存数据库H2
怎么写测试?
关注类本身的功能、测试不同输入结果、可重复的测试、测试与代码
本身同样重要,需要代码审查
JUnit测试中的一些问题?
Junit测试不是解决所有软件测试中的问题,对于框架中的一些问题需要第三方的类库去解决,比如HTTPUnit、JWebUnit、XMLUnit、GroboUtils多线程测试
Junit4
Test Annotation :
@Before
使用了该元数据的方法在每个测试方法执行之前都要执行一次
@BeforeClass
在所有方法执行之前执行
@After
使用了该元数据的方法在每个测试方法执行之后要执行一次
@AfterClass
在所有方法执行之后执行
@Ignore
该元数据标记的测试方法在测试中会被忽略
@Test
测试方法,顺序未知
@Test(expected=Exception.class)
通过@Test元数据中的expected属性。expected属性的值是一个异
常的类型
@Test(timeout=xxx):
该元数据传入了一个时间(毫秒)给测试方法,
如果测试方法在制定的时间之内没有运行完,则测试也失败
Junit3
需要继承一些类,比如TestCase
测试方法命名必须以小写的test开始
在setUp()方法中,主要是实现一些在测试工作前的资源及环境设置等的初始化设置;而针对方法的测试用例中,需要用户自己编写,一般是以“test+方法名”;
tearDown()在每个测试方法之后运行,用来撤消其初始化的测试环境。
执行当前所有的test case
import junit.framework.Test;
import junit.framework.TestSuite;
import android.test.suitebuilder.TestSuiteBuilder;
public class AllTests2 extends TestSuite{
public static Test suite() {
return new TestSuiteBuilder(AllTests2.class).includeAllPackagesUnderHere().build();
}
}
被测函数
public class SampleCaculator {
public int add(int augend , int addend) {
return augend + addend ;
}
public int subtration(int minuend , int subtrahend) {
return minuend - subtrahend;
}
}
顺序执行Junit测试case
exapmle1:
test suite:
import junit.framework.TestSuite;
public class AllTests3 extends TestSuite{
public static void main(String[] args) {
junit.textui.TestRunner.run(suite());
}
public static TestSuite suite() {
TestSuite suite= new TestSuite("Framework Tests");
suite.addTest(test.AllTests.suite());
suite.addTest(test.XMLTest5.suite());
return suite;
}
}
example2:
import junit.framework.Test;
import junit.framework.TestSuite;
public class AllTests extends TestSuite{
public static Test suite() {
TestSuite suite = new TestSuite("TestSuite Test");
suite.addTestSuite(XMLTest.class);
suite.addTestSuite(XMLTest2.class);
return suite;
}
}
测试的 test case
test case1:
import junit.framework.Assert;
import junit.framework.TestCase;
public class XMLTest2 extends TestCase {
protected int i3 = 3;
public void setUp(){
i3 = 5;
}
public void testValue(){
Assert.assertEquals(i3, 5);
}
public void tearDown(){
i3=0;
}
}
test case2:
import junit.framework.TestCase;
import junit.framework.TestSuite;
public class XMLTest5 extends TestCase {
private int fValue1;
private int fValue2;
private int unused;
//@Override
protected void setUp() {
fValue1= 2;
fValue2= 3;
}
public static TestSuite suite() {
return new TestSuite(XMLTest5.class);
}
public void testAdd() {
double result= fValue1 + fValue2;
// forced failure result == 5
assertTrue(result != 6);
}
//@Test(expected=Exception.class)
public void testDivideByZero() throws Exception{
int zero= 0;
int result = zero/8;
//int result= 8/zero;
unused= result; // avoid warning for not using result
assertSame(unused, result);
}
public void testEquals() {
assertEquals(12, 12);
assertEquals(12L, 12L);
assertEquals(new Long(12), new Long(12));
}
}
test case3:
顺序执行当前suitexia的所有测试
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
public class XMLTest6 extends TestCase {
private static int fValue1;
private static int fValue2;
private static int unused;
//@Override
protected void setUp() {
fValue1= 2;
fValue2= 3;
}
public static TestSuite testSuite() throws Exception {
TestSuite suite= new TestSuite("Test execute according list");
suite.addTest((junit.framework.Test) testDivideByZero());
suite.addTest((junit.framework.Test) testEquals());
suite.addTest((junit.framework.Test) testAdd());
return suite;
}
public static Test testAdd() {
double result= fValue1 + fValue2;
// forced failure result == 5
assertTrue(result != 6);
System.out.println("Test testAdd()");
return null;
}
//@Test(expected=Exception.class)
public static Test testDivideByZero() throws Exception{
int zero= 0;
int result = zero/8;
//int result= 8/zero;
unused= result; // avoid warning for not using result
assertSame(unused, result);
System.out.println("Test testDivideByZero()");
return null;
}
public static Test testEquals() {
assertEquals(12, 12);
assertEquals(12L, 12L);
assertEquals(new Long(12), new Long(12));
System.out.println("Test testEquals()");
return null;
}
}
Android and JUnit
JUnit in Andriod :
只有junit3被支持,
配置测试:
Android测试类需要继承android.test.AndroidTestCase
配置AndroidManifest.xml文件
1) <uses-libraryandroid:name="android.test.runner" /> 说明:与<activity>位置同级
2) <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.example.testandriod" android:label="Tests for My App" />
说明:与<application>标签同级,targetPackage属性与上面mainfest的package属性内容相同即可 -->
AndroidManifest.xml 配置
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.testandriod"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<uses-library android:name="android.test.runner" />
<activity android:name=".JunitTestActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.example.testandriod.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.example.testandriod" android:label="Tests for My App" />
</manifest>
主函数
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
测试test case
import junit.framework.Assert;
import com.example.testandriod.MainActivity;
import com.example.testandriod.R;
import android.test.ActivityInstrumentationTestCase2;
import android.widget.TextView;
public class XMLTest4 extends ActivityInstrumentationTestCase2<MainActivity> {
private TextView result;
public XMLTest4() {
super("test", MainActivity.class);
}
@Override
protected void setUp() throws Exception {
super.setUp();
MainActivity mainActivity = getActivity();
result = (TextView) mainActivity.findViewById(R.id.action_settings);
}
public void testResult(){
Assert.assertNull(result);
}
}
www.junit.org
http://developer.android.com/sdk/index.html
http://tech.it168.com/a2010/1027/1118/000001118903_all.shtml
http://developer.samsung.com/android/technical-docs/Basics-of-JUnit-in-Android
http://hatsukiakio.blogspot.hk/2009/05/android-15-junit.html
http://my.oschina.net/liux/blog/52469
JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(
regression testing framework)。Junit测试是程序员测试,即所谓
白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完
成什么样(What)的功能。Junit是一套框架,继承TestCase类,就可
以用Junit进行自动测试了。
JUnit的4大功能?
管理测试用例TestSuite
定义测试代码TestCase
定义测试环境
检验测试结果
测试类别?
CI (静态方法测试TU、动态方法测试TI、系统测试TS)
测试数据?
真实数据库数据、内存数据库H2
怎么写测试?
关注类本身的功能、测试不同输入结果、可重复的测试、测试与代码
本身同样重要,需要代码审查
JUnit测试中的一些问题?
Junit测试不是解决所有软件测试中的问题,对于框架中的一些问题需要第三方的类库去解决,比如HTTPUnit、JWebUnit、XMLUnit、GroboUtils多线程测试
Junit4
Test Annotation :
@Before
使用了该元数据的方法在每个测试方法执行之前都要执行一次
@BeforeClass
在所有方法执行之前执行
@After
使用了该元数据的方法在每个测试方法执行之后要执行一次
@AfterClass
在所有方法执行之后执行
@Ignore
该元数据标记的测试方法在测试中会被忽略
@Test
测试方法,顺序未知
@Test(expected=Exception.class)
通过@Test元数据中的expected属性。expected属性的值是一个异
常的类型
@Test(timeout=xxx):
该元数据传入了一个时间(毫秒)给测试方法,
如果测试方法在制定的时间之内没有运行完,则测试也失败
Junit3
需要继承一些类,比如TestCase
测试方法命名必须以小写的test开始
在setUp()方法中,主要是实现一些在测试工作前的资源及环境设置等的初始化设置;而针对方法的测试用例中,需要用户自己编写,一般是以“test+方法名”;
tearDown()在每个测试方法之后运行,用来撤消其初始化的测试环境。
执行当前所有的test case
import junit.framework.Test;
import junit.framework.TestSuite;
import android.test.suitebuilder.TestSuiteBuilder;
public class AllTests2 extends TestSuite{
public static Test suite() {
return new TestSuiteBuilder(AllTests2.class).includeAllPackagesUnderHere().build();
}
}
被测函数
public class SampleCaculator {
public int add(int augend , int addend) {
return augend + addend ;
}
public int subtration(int minuend , int subtrahend) {
return minuend - subtrahend;
}
}
顺序执行Junit测试case
exapmle1:
test suite:
import junit.framework.TestSuite;
public class AllTests3 extends TestSuite{
public static void main(String[] args) {
junit.textui.TestRunner.run(suite());
}
public static TestSuite suite() {
TestSuite suite= new TestSuite("Framework Tests");
suite.addTest(test.AllTests.suite());
suite.addTest(test.XMLTest5.suite());
return suite;
}
}
example2:
import junit.framework.Test;
import junit.framework.TestSuite;
public class AllTests extends TestSuite{
public static Test suite() {
TestSuite suite = new TestSuite("TestSuite Test");
suite.addTestSuite(XMLTest.class);
suite.addTestSuite(XMLTest2.class);
return suite;
}
}
测试的 test case
test case1:
import junit.framework.Assert;
import junit.framework.TestCase;
public class XMLTest2 extends TestCase {
protected int i3 = 3;
public void setUp(){
i3 = 5;
}
public void testValue(){
Assert.assertEquals(i3, 5);
}
public void tearDown(){
i3=0;
}
}
test case2:
import junit.framework.TestCase;
import junit.framework.TestSuite;
public class XMLTest5 extends TestCase {
private int fValue1;
private int fValue2;
private int unused;
//@Override
protected void setUp() {
fValue1= 2;
fValue2= 3;
}
public static TestSuite suite() {
return new TestSuite(XMLTest5.class);
}
public void testAdd() {
double result= fValue1 + fValue2;
// forced failure result == 5
assertTrue(result != 6);
}
//@Test(expected=Exception.class)
public void testDivideByZero() throws Exception{
int zero= 0;
int result = zero/8;
//int result= 8/zero;
unused= result; // avoid warning for not using result
assertSame(unused, result);
}
public void testEquals() {
assertEquals(12, 12);
assertEquals(12L, 12L);
assertEquals(new Long(12), new Long(12));
}
}
test case3:
顺序执行当前suitexia的所有测试
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
public class XMLTest6 extends TestCase {
private static int fValue1;
private static int fValue2;
private static int unused;
//@Override
protected void setUp() {
fValue1= 2;
fValue2= 3;
}
public static TestSuite testSuite() throws Exception {
TestSuite suite= new TestSuite("Test execute according list");
suite.addTest((junit.framework.Test) testDivideByZero());
suite.addTest((junit.framework.Test) testEquals());
suite.addTest((junit.framework.Test) testAdd());
return suite;
}
public static Test testAdd() {
double result= fValue1 + fValue2;
// forced failure result == 5
assertTrue(result != 6);
System.out.println("Test testAdd()");
return null;
}
//@Test(expected=Exception.class)
public static Test testDivideByZero() throws Exception{
int zero= 0;
int result = zero/8;
//int result= 8/zero;
unused= result; // avoid warning for not using result
assertSame(unused, result);
System.out.println("Test testDivideByZero()");
return null;
}
public static Test testEquals() {
assertEquals(12, 12);
assertEquals(12L, 12L);
assertEquals(new Long(12), new Long(12));
System.out.println("Test testEquals()");
return null;
}
}
Android and JUnit
JUnit in Andriod :
只有junit3被支持,
配置测试:
Android测试类需要继承android.test.AndroidTestCase
配置AndroidManifest.xml文件
1) <uses-libraryandroid:name="android.test.runner" /> 说明:与<activity>位置同级
2) <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.example.testandriod" android:label="Tests for My App" />
说明:与<application>标签同级,targetPackage属性与上面mainfest的package属性内容相同即可 -->
AndroidManifest.xml 配置
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.testandriod"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<uses-library android:name="android.test.runner" />
<activity android:name=".JunitTestActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.example.testandriod.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.example.testandriod" android:label="Tests for My App" />
</manifest>
主函数
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
测试test case
import junit.framework.Assert;
import com.example.testandriod.MainActivity;
import com.example.testandriod.R;
import android.test.ActivityInstrumentationTestCase2;
import android.widget.TextView;
public class XMLTest4 extends ActivityInstrumentationTestCase2<MainActivity> {
private TextView result;
public XMLTest4() {
super("test", MainActivity.class);
}
@Override
protected void setUp() throws Exception {
super.setUp();
MainActivity mainActivity = getActivity();
result = (TextView) mainActivity.findViewById(R.id.action_settings);
}
public void testResult(){
Assert.assertNull(result);
}
}
www.junit.org
http://developer.android.com/sdk/index.html
http://tech.it168.com/a2010/1027/1118/000001118903_all.shtml
http://developer.samsung.com/android/technical-docs/Basics-of-JUnit-in-Android
http://hatsukiakio.blogspot.hk/2009/05/android-15-junit.html
http://my.oschina.net/liux/blog/52469
相关推荐
JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage,包含依赖包:junit-jupiter-5.5.1.jar,junit-jupiter-engine-5.5.1.jar,junit-jupiter-params-5.5.1.jar,junit-platform-launcher-1.5.1.jar,junit-...
JUnit是Java编程语言中最常用的单元测试框架之一,用于编写和运行可重复的自动化测试用例。Junit5.7.2版本是这个框架的一个稳定版本,提供了许多改进和新特性,使得测试更加高效且易于维护。这个离线jar文件包含了...
这个名为"junit5.jar"的文件正是JUnit 5的核心库,它包含了执行单元测试所需的所有核心组件,包括JUnit Platform、JUnit Jupiter和JUnit Vintage。本文将全面解析JUnit 5的关键特性和使用方法。 首先,JUnit ...
Files contained in junit4-4.8.2.jar: LICENSE.txt META-INF/MANIFEST.MF junit.extensions.ActiveTestSuite.class junit.extensions.RepeatedTest.class junit.extensions.TestDecorator.class junit.extensions...
JUnit是Java编程语言中最常用的单元测试框架之一,它允许开发者编写可重复运行的测试用例,以确保代码的正确性和稳定性。JUnit3.8.1是该框架的一个较早版本,尽管现在已经有更新的版本(如JUnit5),但了解其基本...
JUnit4测试框架是Java开发中广泛使用的单元测试工具,它为开发者提供了编写和运行可重复、可靠的测试用例的能力。这个“junit4测试jar包”包含了一切你需要在项目中集成JUnit4进行测试的库文件。只需将其复制到你的...
赠送jar包:junit-4.11.jar; 赠送原API文档:junit-4.11-javadoc.jar; 赠送源代码:junit-4.11-sources.jar; 赠送Maven依赖信息文件:junit-4.11.pom; 包含翻译后的API文档:junit-4.11-javadoc-API文档-中文...
赠送jar包:junit-4.12.jar; 赠送原API文档:junit-4.12-javadoc.jar; 赠送源代码:junit-4.12-sources.jar; 包含翻译后的API文档:junit-4.12-javadoc-API文档-中文(简体)版.zip 对应Maven信息:groupId:...
"JUnit in Action 3rd Edition" JUnit是一种流行的Java单元测试框架,由Kent Beck和Eric Gamma于1997年创立。JUnit在软件测试领域中扮演着重要的角色,帮助开发者编写高质量的代码。下面是关于JUnit的重要知识点: ...
JUnit是Java编程语言中最常用的单元测试框架之一,它允许开发者编写可执行的测试用例来验证代码的功能。这个“junit工具jar包”是JUnit 4.8.1版本,一个稳定且广泛使用的版本,提供了丰富的断言方法和测试注解,便于...
Junit5是Java开发中最常用的单元测试框架之一,它的出现为开发者提供了更加高效、灵活的测试体验。相较于之前的版本,Junit5引入了许多新的特性和改进,使得测试代码的编写和维护变得更加简单。本整合包包含了Junit5...
JUnit5相关的 JUnit Jupiter.jar依赖包,主要包含: junit-jupiter-5.5.1.jar,junit-jupiter-api-5.5.1.jar,junit-jupiter-engine-5.5.1.jar,junit-jupiter-params-5.5.1.jar,junit-jupiter-api-5.4.2.jar,...
赠送jar包:junit-4.13.2.jar; 赠送原API文档:junit-4.13.2-javadoc.jar; 赠送源代码:junit-4.13.2-sources.jar; 赠送Maven依赖信息文件:junit-4.13.2.pom; 包含翻译后的API文档:junit-4.13.2-javadoc-API...
JUnit4是Java编程语言中最广泛使用的单元测试框架之一,它为开发者提供了编写可重复执行、易于维护的测试代码的能力。这个“junit4 jar包”包含了运行JUnit4测试所必需的库文件,主要包括两个核心组件:`junit-4.11....
《JUnit in Action》是一本专为Java开发人员深入理解单元测试框架JUnit而编写的经典书籍。本书详尽地探讨了如何有效地使用JUnit进行软件测试,包括基础概念、高级特性和最佳实践,旨在帮助读者提升软件质量,降低...
JUnit5是Java编程语言中最流行的单元测试框架之一,它的最新版本带来了许多改进和新特性,使得测试更加高效和灵活。本资源包含的`junit5.jar`是JUnit5的运行库,可以用于运行使用JUnit5编写的测试用例。而`junit5-...
JUnit是Java编程语言中最常用的单元测试框架之一,它极大地简化了对代码进行验证和调试的过程。Junit4.12是该框架的一个稳定版本,它包含了许多改进和新特性,使得测试更加灵活和强大。在本文中,我们将深入探讨...
JUnit4是Java编程语言中最广泛使用的单元测试框架之一,它为开发者提供了一种方便、高效的方式来验证代码的正确性。这个“junit4 jar完整包”包含了所有你需要进行单元测试的类和接口,使得测试过程变得简单且易于...
JUnit5是Java编程语言中最广泛使用的单元测试框架之一,它为开发者提供了强大的测试能力,确保代码的质量和稳定性。本篇文章将详细介绍JUnit5的核心组件、主要功能以及如何在项目中使用。 JUnit5由三个主要模块组成...
### Junit单元测试内部机制深度解析 #### 一、自动化软件测试的重要性 随着软件工程的不断发展,软件的规模和复杂性急剧增加,软件测试成为确保软件质量和可靠性的关键环节。自动化测试,尤其是单元测试,因其高效...