junit斷言總結


我們平時編寫自己的測試類,如果沒有斷言,那么就沒寫測試的必要了。

JUnit框架用一組assert方法封裝了最常見的測試任務。這些assert方法可以極大地簡化單元測試的編寫。

Assert類包含了一組靜態的測試方法,用於驗證期望值expected和實際值actual邏輯比對是否正確,即測試失敗,標志為未通過測試。

如果期望值和實際值比對失敗,Assert類就會拋出一個AssertionFailedError異常,Junit測試框架將這種錯誤歸入Fails並且加以記錄。

每一個Assert類所屬的方法都會被重載(OverLoaded),如果指定了一個String類型的傳參則該參數將被做為AssertionFailedError異常的標識信息,告訴測試人員該異常的具體信息。

定義assert方法的輔助類的名稱:Assert類。這個類包含了很多對於編寫測試很有用的具體代碼。Assert只有8個公有核心公有核心方法(如下圖所示)。



Javadoc 中充滿了這8個方法的便捷形式。這些便捷形式使得傳遞在測試中需要的任何類型都很簡單。以assertEquals方法為例,它就有20種形式!大多數形式都是便捷形式,最終還是調用了核心的assertEquals(String message,Object expected, Object actual)方法。其實我一直比較好奇的,為什么Assert類沒有assertNotEquals方法。另外在junit4中,也加入了AssertArrayEquals方法和AssertThat方法,這2個方法一個用來比較數組,一個用來使用matcher做自定義校驗,關於Hamcrest我后面會專門做整理,這里先不做贅述。

總結:

1,關於上面的幾個方法,我們都可以在使用它的重載方法,在第一個位置多帶一個參數,如果斷言不通過,拋出的異常信息中就會封裝着我們傳入的第一個異常參數信息。

2,在使用AssertEquals方法的時候,如果比較的2個參數是double或者float類型的時候,在第3個參數我們還可以傳入一個誤差范圍。如果實際值在(期望值-誤差范圍)和(期望值+誤差范圍)內,那么測試通過。

當進行帶有輸入誤差和截斷誤差的數學運算時,或者當斷言一個關於文件修改日期的條件時,這些重載方法就很有用。

3,我們在使用上面的這些斷言的時候,可以靜態一次導入Assert類。

import static org.junit.Assert.*;
4,使用3.8系列的junit的話不用import這個斷言類,使用4以后的系列必須inport進來,因為4X版本的junit又重新寫了斷言類,看過源碼就知道是有2個斷言類的。38那個斷言類過時了,所以我們使用org.junit下面那個斷言類。

package junit.framework;

/**
 * A set of assert methods.  Messages are only displayed when an assert fails.
 *
 * @deprecated Please use {@link org.junit.Assert} instead.
 */
@Deprecated
public class Assert {}
package org.junit;

import org.hamcrest.Matcher;
import org.hamcrest.MatcherAssert;
import org.junit.internal.ArrayComparisonFailure;
import org.junit.internal.ExactComparisonCriteria;
import org.junit.internal.InexactComparisonCriteria;

/**
 * A set of assertion methods useful for writing tests. Only failed assertions
 * are recorded. These methods can be used directly:
 * <code>Assert.assertEquals(...)</code>, however, they read better if they
 * are referenced through static import:
 *
 * <pre>
 * import static org.junit.Assert.*;
 *    ...
 *    assertEquals(...);
 * </pre>
 *
 * @see AssertionError
 * @since 4.0
 */
public class Assert {}



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM