Junit中Assert.assertEquals的作用

junit.framework包下的Assert提供了多个断言方法,主要用于比较测试传递进去的两个参数。

Assert.assertEquals()及其重载方法: 1. 如果两者一致, 程序继续往下运行. 2. 如果两者不一致, 中断测试方法, 抛出异常信息 AssertionFailedError.

查看源码, 以Assert.assertEquals(int expected, int actual)为例:

/**
 * Asserts that two ints are equal. 断言两个int是相等的
 */ 
static public void assertEquals(int expected, int actual) { 
     assertEquals(null, expected, actual); 
}

可以看到里面调用了assertEquals(String message, int expected, int actual)方法:

/**
 * Asserts that two ints are equal. If they are not
 * an AssertionFailedError is thrown with the given message.
 * 如果不抛出带有 message 的异常(AssertionFailedError)信息, 则表明两者相等
 */ 
static public void assertEquals(String message, int expected, int actual) { 
    assertEquals(message, Integer.valueOf(expected), Integer.valueOf(actual)); 
}

可以看到, 这里把int类型封箱成为Integer类型. 注释说, 会抛异常, 但这里没有. 没关系, 我们接着看里面调用: assertEquals(String message, Object expected, Object actual)方法:

/**
 * Asserts that two objects are equal. If they are not
 * an AssertionFailedError is thrown with the given message.
 * 如果不抛出带有 message 的异常(AssertionFailedError)信息, 则表明两者相等(这里比较的是Object对象)
 */ 
static public void assertEquals(String message, Object expected, Object actual) { 
     if (expected == null && actual == null) { 
         return; 
    } 
    if (expected != null && expected.equals(actual)) { 
        return; 
    } 
    failNotEquals(message, expected, actual); 
}

两个if语句, 判断了两者相等的情况: 引用(地址)相等或者内容相等. 如果这两种情况都不相等, 那么表明1参和2参实际是不相等, 所以基本可以判断出要抛出的异常肯定是在failNotEquals(String message, Object expected, Object actual)方法抛出的, 接下来就比较简单了:

static public void failNotEquals(String message, Object expected, Object actual) { 
    fail(format(message, expected, actual)); 
} 
public static String format(String message, Object expected, Object actual) { 
    String formatted = ""; 
    if (message != null && message.length() > 0) { 
        formatted = message + " "; 
    } 
    return formatted + "expected:<" + expected + "> but was:<" + actual + ">"; 
} 
/**
* Fails a test with the given message.
*/ 
static public void fail(String message) { 
    if (message == null) { 
        throw new AssertionFailedError(); 
    } 
    throw new AssertionFailedError(message); 
}

以上可以看出, 最终是由fail(String message)这个方法抛出异常信息!!

  • 略作一提:
    Assert.assertSame(Object expected, Object actual)方法,查看源码, 其比较的是引用地址是否相等, 并没有对内容进行比较:
/**
 * Asserts that two objects refer to the same object. If they are not
 * the same an AssertionFailedError is thrown.
 */ 
static public void assertSame(Object expected, Object actual) { 
    assertSame(null, expected, actual); 
} 
/**
 * Asserts that two objects refer to the same object. If they are not
 * an AssertionFailedError is thrown with the given message.
 */ 
static public void assertSame(String message, Object expected, Object actual) { 
    if (expected == actual) { 
        return; 
    } 
    failNotSame(message, expected, actual); 
}

猜你喜欢

转载自www.cnblogs.com/jlutiger/p/11075316.html

相关文章