`

Junit

 
阅读更多
什么是 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
分享到:
评论

相关推荐

    junit5.rar包含JUnit Platform + JUnit Jupiter + JUnit Vintage依赖jar包

    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-...

    Junit5.7.2离线jar

    JUnit是Java编程语言中最常用的单元测试框架之一,用于编写和运行可重复的自动化测试用例。Junit5.7.2版本是这个框架的一个稳定版本,提供了许多改进和新特性,使得测试更加高效且易于维护。这个离线jar文件包含了...

    junit5.jar

    这个名为"junit5.jar"的文件正是JUnit 5的核心库,它包含了执行单元测试所需的所有核心组件,包括JUnit Platform、JUnit Jupiter和JUnit Vintage。本文将全面解析JUnit 5的关键特性和使用方法。 首先,JUnit ...

    junit的jar包

    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...

    JUnit3.8.1 以及使用JUnit测试的代码demo

    JUnit是Java编程语言中最常用的单元测试框架之一,它允许开发者编写可重复运行的测试用例,以确保代码的正确性和稳定性。JUnit3.8.1是该框架的一个较早版本,尽管现在已经有更新的版本(如JUnit5),但了解其基本...

    junit4测试jar包

    JUnit4测试框架是Java开发中广泛使用的单元测试工具,它为开发者提供了编写和运行可重复、可靠的测试用例的能力。这个“junit4测试jar包”包含了一切你需要在项目中集成JUnit4进行测试的库文件。只需将其复制到你的...

    junit-4.11-API文档-中文版.zip

    赠送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文档-中文...

    junit-4.12-API文档-中文版.zip

    赠送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 3nd Edition

    "JUnit in Action 3rd Edition" JUnit是一种流行的Java单元测试框架,由Kent Beck和Eric Gamma于1997年创立。JUnit在软件测试领域中扮演着重要的角色,帮助开发者编写高质量的代码。下面是关于JUnit的重要知识点: ...

    junit工具jar包

    JUnit是Java编程语言中最常用的单元测试框架之一,它允许开发者编写可执行的测试用例来验证代码的功能。这个“junit工具jar包”是JUnit 4.8.1版本,一个稳定且广泛使用的版本,提供了丰富的断言方法和测试注解,便于...

    Junit5依赖整合包

    Junit5是Java开发中最常用的单元测试框架之一,它的出现为开发者提供了更加高效、灵活的测试体验。相较于之前的版本,Junit5引入了许多新的特性和改进,使得测试代码的编写和维护变得更加简单。本整合包包含了Junit5...

    junit-jupiter-5.5.1.rar

    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,...

    junit-4.13.2-API文档-中文版.zip

    赠送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 jar包

    JUnit4是Java编程语言中最广泛使用的单元测试框架之一,它为开发者提供了编写可重复执行、易于维护的测试代码的能力。这个“junit4 jar包”包含了运行JUnit4测试所必需的库文件,主要包括两个核心组件:`junit-4.11....

    JUnit in Action(JUnit经典书籍)中文+英文

    《JUnit in Action》是一本专为Java开发人员深入理解单元测试框架JUnit而编写的经典书籍。本书详尽地探讨了如何有效地使用JUnit进行软件测试,包括基础概念、高级特性和最佳实践,旨在帮助读者提升软件质量,降低...

    Junit5.zip

    JUnit5是Java编程语言中最流行的单元测试框架之一,它的最新版本带来了许多改进和新特性,使得测试更加高效和灵活。本资源包含的`junit5.jar`是JUnit5的运行库,可以用于运行使用JUnit5编写的测试用例。而`junit5-...

    Junit4.12和依赖包

    JUnit是Java编程语言中最常用的单元测试框架之一,它极大地简化了对代码进行验证和调试的过程。Junit4.12是该框架的一个稳定版本,它包含了许多改进和新特性,使得测试更加灵活和强大。在本文中,我们将深入探讨...

    junit4 jar完整包

    JUnit4是Java编程语言中最广泛使用的单元测试框架之一,它为开发者提供了一种方便、高效的方式来验证代码的正确性。这个“junit4 jar完整包”包含了所有你需要进行单元测试的类和接口,使得测试过程变得简单且易于...

    Junit5.jar包,代码测试工具

    JUnit5是Java编程语言中最广泛使用的单元测试框架之一,它为开发者提供了强大的测试能力,确保代码的质量和稳定性。本篇文章将详细介绍JUnit5的核心组件、主要功能以及如何在项目中使用。 JUnit5由三个主要模块组成...

    Junit单元测试内部机制解析

    ### Junit单元测试内部机制深度解析 #### 一、自动化软件测试的重要性 随着软件工程的不断发展,软件的规模和复杂性急剧增加,软件测试成为确保软件质量和可靠性的关键环节。自动化测试,尤其是单元测试,因其高效...

Global site tag (gtag.js) - Google Analytics