日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

用于单元测试的JUnit教程–最终指南(PDF下载)

發布時間:2023/12/3 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用于单元测试的JUnit教程–最终指南(PDF下载) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

編者注: 我們在Java Code Geeks上提供了許多JUnit教程,例如JUnit入門示例 , 使用斷言和注釋的 JUnit 示例 , JUnit注釋示例等。

但是,為了方便讀者,我們希望將所有JUnit功能收集在一份詳細的指南中。 我們希望您能喜歡!

目錄

1.單元測試簡介
1.1。 什么是單元測試? 1.2。 測試范圍 1.3。Java中的單元測試
2. JUnit簡介
2.1。 使用Eclipse的JUnit簡單示例 2.2。 JUnit批注 2.3。 JUnit斷言
3.使用Eclipse的JUnit完整示例
3.1。 初步步驟 3.2。 創建一個要測試的Java類 3.3。 創建并運行一個JUnit測試用例 3.4。 使用@Ignore批注 3.5。 創建套件測試 3.6。 創建參數化測試 3.7。 規則 3.8。 分類目錄
4.從命令行運行JUnit測試 5。結論

1.單元測試簡介

什么是單元測試?

單元可以是函數,類,包或子系統。 因此,術語“單元測試”指的是測試代碼中如此小的單元,以確保它們按預期工作的實踐。 例如,我們可以測試輸出是給定某些輸入的預期結果,還是條件為真或假。

這種做法可幫助開發人員發現代碼背后的邏輯故障,并提高代碼質量。 此外,可以使用單元測試,以確保代碼在將來發生更改時能夠按預期工作。

測試范圍

通常,開發社區對于應該測試的代碼百分比(測試覆蓋率)有不同的看法。 一些開發人員認為代碼應具有100%的測試覆蓋率,而其他開發人員則包含50%或更少的測試覆蓋率。 無論如何,您應該為代碼的復雜或關鍵部分編寫測試。

Java單元測試

Java中最受歡迎的測試框架是JUnit 。 由于本指南主要針對JUnit,因此該測試框架的更多詳細信息將在下一部分中介紹。 Java中另一個流行的測試框架是TestNG 。

2. JUnit簡介

JUnit是一個開放源代碼測試框架,用于編寫和運行可重復的自動化測試,因此可以確保我們的代碼能夠按預期工作。 JUnit在行業中廣泛使用,可以用作獨立的Java程序(從命令行)或在IDE(例如Eclipse)中使用。

JUnit提供:

  • 用于測試預期結果的斷言。
  • 用于共享通用測試數據的測試功能。
  • 測試套件,可輕松組織和運行測試。
  • 圖形和文字測試賽跑者。

JUnit用于測試:

  • 整個對象
  • 對象的一部分–一種方法或某些交互方法
  • 幾個物體之間的相互作用

使用Eclipse的JUnit簡單示例

在本節中,我們將看到一個簡單的JUnit示例。 首先,我們將介紹我們要測試的課程:

Calculate.java

package com.javacodegeeks.junit;public class Calculate {public int sum(int var1, int var2) {System.out.println("Adding values: " + var1 + " + " + var2);return var1 + var2;}}

在上面的源代碼中,我們可以注意到該類有一個名為sum()公共方法,該方法將輸入兩個整數,將它們相加并返回結果。 因此,我們將測試此方法。 為此,我們將創建另一個類,該類包括將測試上一類的每個方法的方法(在這種情況下,我們只有一個要測試的方法)。 這是最常見的用法。 當然,如果一種方法非常復雜且可擴展,那么對于這種復雜方法,我們可以有多個測試方法。 下一部分將介紹創建測試用例的詳細信息。 下面是名為CalculateTest.java的類的代碼,它具有測試類的作用:

CalculateTest.java

package com.javacodegeeks.junit;import static org.junit.Assert.*;import org.junit.Test;public class CalculateTest {Calculate calculation = new Calculate();int sum = calculation.sum(2, 5);int testSum = 7;@Testpublic void testSum() {System.out.println("@Test sum(): " + sum + " = " + testSum);assertEquals(sum, testSum);}}

讓我們解釋一下上面的代碼。 首先,我們可以看到在testSum()方法上方有一個@Test批注。 此注釋指示可以將其附加到的public void方法作為測試用例運行。 因此, testSum()方法是將測試sum()公共方法的方法。 我們還可以觀察到一種稱為assertEquals(sum, testsum) 。 方法assertEquals ([String message], object expected, object actual)將兩個對象作為輸入,并斷言這兩個對象相等。

如果我們運行測試類,請右鍵單擊測試類,然后選擇Run As-> Junit Test ,程序輸出將如下所示:

Adding values: 2 + 5 @Test sum(): 7 = 7

為了查看JUnit測試的實際結果,Eclipse IDE提供了一個JUnit窗口,其中顯示了測試結果。 在測試成功的情況下,“ JUnit”窗口不會顯示任何錯誤或失敗,如下圖所示:

圖1:成功測試后的JUnit窗口。

現在,如果我們更改以下代碼行:

int testSum = 10;

因此要測試的整數不相等,輸出將是:

Adding values: 2 + 5 @Test sum(): 7 = 10

并且在JUnit窗口中,將出現一個錯誤,并且將顯示此消息:

java.lang.AssertionError: expected: but was: at com.javacodegeeks.junit.CalculateTest.testSum(CalculateTest.java:16)

JUnit批注

在本節中,我們將提到Junit 4支持的基本注釋。下表總結了這些注釋:

注解描述
@Test
public void method()
Test批注指示可以將其附加到的public void方法作為測試用例運行。
@Before
public void method()
Before注釋指示必須在類中的每個測試之前執行此方法,以便執行測試所需的一些前提條件。
@BeforeClass
public static void method()
BeforeClass批注指示附加的靜態方法必須在該類中的所有測試之前執行一次。 當測試方法共享計算量大的設置(例如,連接到數據庫)時,就會發生這種情況。
@After
public void method()
After注釋指示此方法在執行每個測試后執行(例如,在執行每個測試后重置一些變量,刪除臨時變量等)
@AfterClass
public static void method()
在執行完JUnit測試用例類中的所有測試后需要執行一種方法以清理昂貴的設置(例如,與數據庫斷開連接)時,可以使用AfterClass注釋。 注意:附加此注釋的方法(類似于BeforeClass )必須定義為靜態。
@Ignore
public static void method()
當您要暫時禁用特定測試的執行時,可以使用“ Ignore注釋。 用@Ignore注釋的每個方法都不會執行。

讓我們看一個帶有上面提到的一些注釋的測試類的例子。

AnnotationsTest.java

package com.javacodegeeks.junit;import static org.junit.Assert.*; import java.util.*; import org.junit.*;public class AnnotationsTest {private ArrayList testList;@BeforeClasspublic static void onceExecutedBeforeAll() {System.out.println("@BeforeClass: onceExecutedBeforeAll");}@Beforepublic void executedBeforeEach() {testList = new ArrayList();System.out.println("@Before: executedBeforeEach");}@AfterClasspublic static void onceExecutedAfterAll() {System.out.println("@AfterClass: onceExecutedAfterAll");}@Afterpublic void executedAfterEach() {testList.clear();System.out.println("@After: executedAfterEach");}@Testpublic void EmptyCollection() {assertTrue(testList.isEmpty());System.out.println("@Test: EmptyArrayList");}@Testpublic void OneItemCollection() {testList.add("oneItem");assertEquals(1, testList.size());System.out.println("@Test: OneItemArrayList");}@Ignorepublic void executionIgnored() {System.out.println("@Ignore: This execution is ignored");} }

如果我們運行上述測試,則??控制臺輸出如下:

@BeforeClass: onceExecutedBeforeAll @Before: executedBeforeEach @Test: EmptyArrayList @After: executedAfterEach @Before: executedBeforeEach @Test: OneItemArrayList @After: executedAfterEach @AfterClass: onceExecutedAfterAll

JUnit斷言

在本節中,我們將介紹許多斷言方法。 所有這些方法都是由Assert類提供的,該類擴展了class java.lang.Object ,它們對于編寫測試以檢測故障很有用。 下表提供了最常用的斷言方法的更詳細說明。

斷言描述
void assertEquals([String message], expected value, actual value) 斷言兩個值相等。 值的類型可以是int,short,long,byte,char或java.lang.Object。 第一個參數是可選的String消息。
void assertTrue([String message], boolean condition) 斷言條件為真。
void assertFalse([String message],boolean condition) 斷言條件為假。
void assertNotNull([String message], java.lang.Object object) 斷言一個對象不為空。
void assertNull([String message], java.lang.Object object) 斷言一個對象為空。
void assertSame([String message], java.lang.Object expected, java.lang.Object actual) 斷言兩個對象引用相同的對象。
void assertNotSame([String message], java.lang.Object unexpected, java.lang.Object actual) 斷言兩個對象沒有引用相同的對象。
void assertArrayEquals([String message], expectedArray, resultArray) 斷言期望的數組與結果數組相等。 Array的類型可以是int,long,short,char,byte或java.lang.Object。

讓我們來看一些上述斷言的示例。

AssertionsTest.java

package com.javacodegeeks.junit;import static org.junit.Assert.*; import org.junit.Test;public class AssertionsTest {@Testpublic void test() {String obj1 = "junit";String obj2 = "junit";String obj3 = "test";String obj4 = "test";String obj5 = null;int var1 = 1;int var2 = 2;int[] arithmetic1 = { 1, 2, 3 };int[] arithmetic2 = { 1, 2, 3 };assertEquals(obj1, obj2);assertSame(obj3, obj4);assertNotSame(obj2, obj4);assertNotNull(obj1);assertNull(obj5);assertTrue(var1 var2);assertArrayEquals(arithmetic1, arithmetic2);}}

在上面的類中,我們可以看到這些assert方法是如何工作的。

  • 如果兩個比較的對象相等,則assertEquals()方法將正常返回,否則將在JUnit窗口中顯示失敗,并且測試將中止。
  • assertSame()和assertNotSame()方法測試兩個對象引用是否指向完全相同的對象。
  • assertNull()和assertNotNull()方法測試變量是否為null。
  • assertTrue()和assertFalse()方法測試條件或變量是true還是false。
  • assertArrayEquals()將比較兩個數組,如果它們相等,則該方法將繼續進行而不會出現錯誤。 否則,將在JUnit窗口中顯示失敗,并且測試將中止。

3.使用Eclipse的JUnit完整示例

在本節中,我們將顯示一個使用JUnit的完整示例。 我們將詳細介紹如何創建和運行測試,并展示如何使用JUnit的特定注釋和斷言。

初始步驟

讓我們創建一個名為JUnitGuide的Java項目。 在src文件夾中,右鍵單擊并選擇com.javacodegeeks.junit > Package ,以創建一個名為com.javacodegeeks.junit的新程序包 ,在該程序包中將找到要測試的類。 對于測試類,最好創建一個新的專用于測試的源文件夾,以使要測試的類和測試類位于不同的源文件夾中。 為此,右鍵單擊您的項目,選擇New-> Source Folder ,將新的源文件夾命名為test,然后單擊Finish 。

圖2:創建一個名為test的新源文件夾。

小費
或者,您可以通過右鍵單擊您的項目并選擇Properties-> Java Build Path ,選擇選項卡Source ,選擇Add Folder-> Create New Folder ,編寫名稱test并按Finish來創建一個新的源文件夾。

您可以輕松地看到項目中有兩個源文件夾:

圖3

您還可以在新創建的測試文件夾中創建一個新包,該包將稱為com.javacodegeeks.junit ,這樣您的測試類就不會位于默認包中,我們可以開始了!

創建要測試的Java類

右鍵單擊src文件夾,然后創建一個名為FirstDayAtSchool.java的新Java類。 這是將測試其公共方法的類。

FirstDayAtSchool.java

package com.javacodegeeks.junit;import java.util.Arrays;public class FirstDayAtSchool {public String[] prepareMyBag() {String[] schoolbag = { "Books", "Notebooks", "Pens" };System.out.println("My school bag contains: "+ Arrays.toString(schoolbag));return schoolbag;}public String[] addPencils() {String[] schoolbag = { "Books", "Notebooks", "Pens", "Pencils" };System.out.println("Now my school bag contains: "+ Arrays.toString(schoolbag));return schoolbag;} }

創建并運行一個JUnit測試用例

要為現有類FirstDayAtSchool.java創建一個JUnit測試用例,請在Package Explorer視圖中右鍵單擊它,然后選擇New→JUnit Test Case 。 更改源文件夾,以便將類定位到測試源文件夾,并確保已選擇標志New JUnit4 test 。

圖4:創建一個新的測試類。

然后,單擊完成 。 如果您的項目的類路徑中不包含JUnit庫,則將顯示以下消息,以便將JUnit庫添加到類路徑中:

圖5:將JUnit4庫添加到項目的構建路徑。

下面是名為FirstDayAtSchoolTest.java的類的代碼,這是我們的測試類:

FirstDayAtSchool.java

package com.javacodegeeks.junit;import static org.junit.Assert.*;import org.junit.Test;public class FirstDayAtSchoolTest {FirstDayAtSchool school = new FirstDayAtSchool();String[] bag1 = { "Books", "Notebooks", "Pens" };String[] bag2 = { "Books", "Notebooks", "Pens", "Pencils" };@Testpublic void testPrepareMyBag() {System.out.println("Inside testPrepareMyBag()");assertArrayEquals(bag1, school.prepareMyBag());}@Testpublic void testAddPencils() {System.out.println("Inside testAddPencils()");assertArrayEquals(bag2, school.addPencils());}}

現在,我們可以通過右鍵單擊測試類并選擇Run As-> JUnit Test來運行測試用例 。

程序輸出將如下所示:

Inside testPrepareMyBag() My school bag contains: [Books, Notebooks, Pens] Inside testAddPencils() Now my school bag contains: [Books, Notebooks, Pens, Pencils]

并且在JUnit視圖中不會出現故障或錯誤。 如果我們更改其中一個數組,則它包含的內容超出了預期的元素:

String[] bag2 = { "Books", "Notebooks", "Pens", "Pencils", "Rulers"};

然后再次運行測試類,JUnit視圖將包含一個失敗:

圖6:測試失敗

否則,如果我們再次更改數組之一,則它包含的元素與預期的元素不同:

String[] bag1 = { "Books", "Notebooks", "Rulers" };

然后再次運行測試類,JUnit視圖將再次包含一個失敗:

圖7:測試失敗

使用

讓我們在上面的示例中看到如何使用@Ignore批注。 在測試類FirstDayAtSchoolTest我們將@Ignore批注添加到testAddPencils()方法。 這樣,我們希望該測試方法將被忽略并且不會執行。

package com.javacodegeeks.junit;import static org.junit.Assert.*;import org.junit.Ignore; import org.junit.Test;public class FirstDayAtSchoolTest {FirstDayAtSchool school = new FirstDayAtSchool();String[] bag1 = { "Books", "Notebooks", "Pens" };String[] bag2 = { "Books", "Notebooks", "Pens", "Pencils" };@Testpublic void testPrepareMyBag() {System.out.println("Inside testPrepareMyBag()");assertArrayEquals(bag1, school.prepareMyBag());}@Ignore@Testpublic void testAddPencils() {System.out.println("Inside testAddPencils()");assertArrayEquals(bag2, school.addPencils());}}

確實,這是根據輸出發生的情況:

Inside testPrepareMyBag() My school bag contains: [Books, Notebooks, Pens]

現在,我們將從testAddPencils()方法中刪除@Ignore批注,而改為對整個類進行批注。

package com.javacodegeeks.junit;import static org.junit.Assert.*;import org.junit.Ignore; import org.junit.Test;@Ignore public class FirstDayAtSchoolTest {FirstDayAtSchool school = new FirstDayAtSchool();String[] bag1 = { "Books", "Notebooks", "Pens" };String[] bag2 = { "Books", "Notebooks", "Pens", "Pencils" };@Testpublic void testPrepareMyBag() {System.out.println("Inside testPrepareMyBag()");assertArrayEquals(bag1, school.prepareMyBag());}@Testpublic void testAddPencils() {System.out.println("Inside testAddPencils()");assertArrayEquals(bag2, school.addPencils());}}

其測試類將不會執行,因此不會在控制臺輸出和junit視圖中顯示任何結果:

圖8

創建套件測試

在本節中,我們將看到如何創建套件測試。 測試套件是來自不同類的一些測試用例的集合,可以使用@RunWith和@Suite批注一起運行它們。 如果您有許多測試類,并且想要一起運行它們,而不是一次運行一個測試,這將非常有幫助。

當使用@RunWith注釋類時,JUnit將調用對其進行注釋的類以運行測試,而不是使用JUnit內置的運行程序。

基于前面幾節的類,我們可以創建兩個測試類。 一個類將測試公共方法prepareMyBag() ,另一類將測試方法addPencils() 。 因此,我們最終將具有以下類:

PrepareMyBagTest.java

package com.javacodegeeks.junit;import org.junit.Test; import static org.junit.Assert.*;public class PrepareMyBagTest {FirstDayAtSchool school = new FirstDayAtSchool();String[] bag = { "Books", "Notebooks", "Pens" };@Testpublic void testPrepareMyBag() {System.out.println("Inside testPrepareMyBag()");assertArrayEquals(bag, school.prepareMyBag());}}

AddPencilsTest.java

package com.javacodegeeks.junit;import org.junit.Test; import static org.junit.Assert.*;public class AddPencilsTest {FirstDayAtSchool school = new FirstDayAtSchool();String[] bag = { "Books", "Notebooks", "Pens", "Pencils" };@Testpublic void testAddPencils() {System.out.println("Inside testAddPencils()");assertArrayEquals(bag, school.addPencils());}}

現在,我們將創建一個測試套件,以便一起運行上述類。 右鍵單擊測試源文件夾,并使用以下代碼創建一個名為SuiteTest.java的新Java類:

SuiteTest.java

package com.javacodegeeks.junit;import org.junit.runner.RunWith; import org.junit.runners.Suite;@RunWith(Suite.class) @Suite.SuiteClasses({ PrepareMyBagTest.class, AddPencilsTest.class }) public class SuitTest {}

使用@Suite.SuiteClasses批注,您可以定義執行中將包括哪些測試類。

因此,如果右鍵單擊測試套件并選擇Run @Suite.SuiteClasses > JUnit Test ,則將按照@Suite.SuiteClasses批注中定義的順序執行兩個測試類。

創建參數化測試

在本節中,我們將看到如何創建參數化測試。 為此,我們將使用第2.1節中提到的類,該類提供了用于添加整數的公共方法。 因此,這將是要測試的課程。

但是什么時候可以將測試類視為參數化測試類? 當然,當滿足以下所有要求時:

  • 該類用@RunWith(Parameterized.class)注釋。
    如上一節所述, @RunWith注釋使JUnit可以調用@RunWith注釋的類來運行測試,而不是使用JUnit內置的運行程序。 Parameterized是JUnit內部的運行程序,它將使用不同的輸入集運行相同的測試用例。
  • 該類具有一個用于存儲測試數據的構造函數。
  • 該類具有生成和返回測試數據的靜態方法,并帶有@Parameters注釋。
  • 該類有一個測試,這顯然意味著它需要一個帶有@Test注釋的方法。

現在,我們將創建一個名為CalculateTest.java的新測試類,它將遵循上述準則。 此類的源代碼如下。

CalculateTest.java

package com.javacodegeeks.junit;import static org.junit.Assert.assertEquals; import java.util.Arrays; import java.util.Collection;import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters;@RunWith(Parameterized.class) public class CalculateTest {private int expected;private int first;private int second;public CalculateTest(int expectedResult, int firstNumber, int secondNumber) {this.expected = expectedResult;this.first = firstNumber;this.second = secondNumber;}@Parameterspublic static Collection addedNumbers() {return Arrays.asList(new Integer[][] { { 3, 1, 2 }, { 5, 2, 3 },{ 7, 3, 4 }, { 9, 4, 5 }, });}@Testpublic void sum() {Calculate add = new Calculate();System.out.println("Addition with parameters : " + first + " and "+ second);assertEquals(expected, add.sum(first, second));} }

正如我們在以上課程中所觀察到的,它滿足了以上所有要求。 該方法addedNumbers帶注釋@Parameters返回數組的集合。 每個數組都包含每個測試執行的輸入/輸出編號。 每個數組中的元素數必須與構造函數中的參數數相同。 因此,在這種特定情況下,每個數組包含三個元素,兩個元素代表要添加的數字,一個元素代表結果。

如果我們運行CalculateTest測試用例,則控制臺輸出如下:

Addition with parameters : 1 and 2 Adding values: 1 + 2 Addition with parameters : 2 and 3 Adding values: 2 + 3 Addition with parameters : 3 and 4 Adding values: 3 + 4 Addition with parameters : 4 and 5 Adding values: 4 + 5

正如我們在輸出中看到的,測試用例執行了四次,這是方法中用@Parameters注釋注釋的輸入數。

規則

在本節中,我們介紹JUnit的一項新功能,即“規則” ,它允許非常靈活地添加或重新定義測試類中每個測試方法的行為。 為此,應使用@Rule批注,以標記測試類的公共字段。 這些字段的類型應該為MethodRule ,這是對運行和報告測試方法的一種更改。 可以將多個MethodRules應用于測試方法。 MethodRule接口具有許多實現,例如ErrorCollector允許在發現第一個問題后繼續執行測試; ExpectedException允許在測試中指定期望的異常類型和消息; TestName可以在測試中提供當前測試名稱方法和許多其他方法。 除已定義的規則外,開發人員可以創建自己的自定義規則,并根據需要在測試用例中使用它們。

下面,我們介紹了在我們自己的測試中使用名為TestName的現有規則之一的方法。 測試即將開始時調用TestName 。

NameRuleTest.java

package com.javacodegeeks.junit;import static org.junit.Assert.*;import org.junit.*; import org.junit.rules.TestName;public class NameRuleTest {@Rulepublic TestName name = new TestName();@Testpublic void testA() {System.out.println(name.getMethodName());assertEquals("testA", name.getMethodName());}@Testpublic void testB() {System.out.println(name.getMethodName());assertEquals("testB", name.getMethodName());} }

我們可以看到@Rule批注標記了公共字段name ,該name是MethodRule類型,尤其是TestName類型。 然后,在這種特定情況下,我們可以在測試中使用此name字段并查找例如測試方法的名稱。

分類目錄

JUnit的另一個新功能稱為類別 ,它使您可以將某些類型的測試組合在一起,甚至可以包括或排除組(類別)。 例如,您可以將慢速測試與快速測試分開。 要將測試用例或方法分配給這些類別之一,需要提供@Category批注。 下面是一個示例,該示例基于JUnit 4.8的發行說明如何使用JUnit的這一出色功能。

public interface FastTests { /* category marker */ }public interface SlowTests { /* category marker */ }

首先,我們定義兩個類別,即FastTests和SlowTests。 類別可以是類或接口。

public class A {@Testpublic void a() {fail();}@Category(SlowTests.class)@Testpublic void b() {} }

在上面的代碼中,我們使用@Category批注標記了類A的測試方法b() ,以表明該特定方法屬于SlowTests類別。 因此,我們不僅可以標記整個類,還可以分別標記一些測試方法。

@Category({ SlowTests.class, FastTests.class }) public class B {@Testpublic void c() {} }

在上面的代碼示例中,我們可以看到整個類B都使用@Category注解進行了注釋。 使用@Category批注對測試類進行批注會自動將其所有測試方法包括在此類別中。 我們還可以看到測試類或測試方法可以屬于多個類別。

@RunWith(Categories.class) @IncludeCategory(SlowTests.class) @SuiteClasses({ A.class, B.class }) // Note that Categories is a kind of Suite public class SlowTestSuite {// Will run A.b and B.c, but not A.a }

在此代碼示例中,我們注意到有一個名為SlowTestSuite的套件測試。 基本上,類別是一種套件。 在此套件中,我們觀察到一個名為@IncludeCategory的新注釋,該注釋指示將在執行中包括哪些類別。 在這種特定情況下,將執行屬于SlowTests類別的方法。 因此,僅在測試方法b()類的A將以及測試方法來執行c()類的B ,這兩者都屬于SlowTests類別。

@RunWith(Categories.class) @IncludeCategory(SlowTests.class) @ExcludeCategory(FastTests.class) @SuiteClasses({ A.class, B.class }) // Note that Categories is a kind of Suite public class SlowTestSuite {// Will run A.b, but not A.a or B.c }

最后,我們對測試套件進行了一些更改,并添加了一個名為@ExcludeCategory新注釋,該注釋指示將從執行中排除哪些類別。 在此特定情況下,將僅執行類A的測試方法b() ,因為這是唯一明確屬于SlowTests類別的測試方法。

我們注意到在這兩種情況下,類A的測試方法a()均不會執行,因為它不屬于任何類別。

4.從命令行運行JUnit測試

您可以使用org.junit.runner.JUnitCore類在Eclipse外部運行JUnit測試。 此類提供了runClasses()方法,該方法使您可以執行一個或多個測試類。 runClasses()方法的返回類型是org.junit.runner.Result類型的對象。 該對象可用于收集有關測試的信息。 另外,如果測試失敗,則可以使用對象org.junit.runner.notification.Failure來保存失敗測試的描述。

以下過程顯示了如何在Eclipse外部運行測試。

使用以下代碼創建一個名為JunitRunner.java的新Java類:

JunitRunner.java

package com.javacodegeeks.junit;import org.junit.runner.JUnitCore; import org.junit.runner.Result; import org.junit.runner.notification.Failure;public class JunitRunner {public static void main(String[] args) {Result result = JUnitCore.runClasses(AssertionsTest.class);for (Failure fail : result.getFailures()) {System.out.println(fail.toString());}if (result.wasSuccessful()) {System.out.println("All tests finished successfully...");}} }

例如,我們選擇運行AssertionsTest測試類。

    • 打開命令提示符并向下移動目錄,以查找兩個類所在的目錄。
C:\Users\konstantina\eclipse_luna_workspace\JUnitGuide\test\com\javacodegeeks\junit>javac -classpath "C:\Users\konstantina\Downloads\junit-4.11.jar";"C:\Users\konstantina\Downloads\hamcrest-core-1.3.jar"; AssertionsTest.java JunitRunner.java

就像我們在Eclipse中所做的一樣,我們還應該將JUnit的庫jar包含到類路徑中。

    • 現在運行JunitRunner 。
C:\Users\konstantina\eclipse_luna_workspace\JUnitGuide\test\com\javacodegeeks\junit>java -classpath "C:\Users\konstantina\Downloads\junit-4.11.jar";"C:\Users\konstantina\Downloads\hamcrest-core-1.3.jar"; JunitRunner

這是輸出:

All tests finished successfully...

5。結論

這是有關JUnit測試框架(Java中最流行的測試框架)的詳細指南。

如果您喜歡此功能,請訂閱我們的時事通訊,以享受每周更新和免費白皮書! 另外,請訪問JCG學院進行更高級的培訓!

下載
您可以在這里下載本指南的完整源代碼: JUnitGuide.zip

翻譯自: https://www.javacodegeeks.com/2014/11/junit-tutorial-unit-testing.html

總結

以上是生活随笔為你收集整理的用于单元测试的JUnit教程–最终指南(PDF下载)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。