equals方法介绍:https://www.cnblogs.com/xdp-gacl/p/3637073.html
java运算符 与(&)、非(~)、或(|)、异或(^):https://www.cnblogs.com/yesiamhere/p/6675067.html
java.lang.Class.isArray() 确定该Class对象表示一个数组类:https://www.yiibai.com/java/lang/class_isarray.html
java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例:https://www.cnblogs.com/zjxynq/p/5882756.html
isInfinite方法——判断double值的大小是否是无穷大:https://blog.csdn.net/youyou_yo/article/details/48707353
isNaN方法——判断double值是否是一个非数字值:https://book.2cto.com/201309/31431.html
如果两个对象不相等,则统一调用这个方法抛出异常
static private void failNotEquals(Object actual , Object expected, String message ) {
fail(format(actual, expected, message));
}
1)format方法定义抛出异常的信息
static String format(Object actual, Object expected, String message) {
String formatted = "";
if (null != message) {
formatted = message + " ";
}
return formatted + ASSERT_LEFT + expected + ASSERT_MIDDLE + actual + ASSERT_RIGHT;
}
2)fail抛出AssertionError异常:
public static void fail(String message) {
throw new AssertionError(message);
}
抛出确定的异常:
public static void fail(String message, Throwable realCause) {
AssertionError ae = new AssertionError(message);
ae.initCause(realCause);
throw ae;
}
1、assertTrue
public static void assertTrue(boolean condition, String message) {
if(!condition) {
failNotEquals(condition, Boolean.TRUE, message);
}
}
2、 assertFalse
public static void assertFalse(boolean condition, String message) {
if(condition) {
failNotEquals(condition, Boolean.FALSE, message); // TESTNG-81
}
}
3、assertNull
public static void assertNull(Object object, String message) {
if (object != null) {
failNotSame(object, null, message);
}
}
4、 assertNotNull
public static void assertNotNull(Object object, String message) {
if (object == null) {
String formatted = "";
if(message != null) {
formatted = message + " ";
}
fail(formatted + "expected object to not be null");
}
assertTrue(object != null, message);
}
5、assertSame
public static void assertSame(Object actual, Object expected, String message) {
if(expected == actual) {
return;
}
failNotSame(actual, expected, message);
}
5、assertNotSame
public static void assertNotSame(Object actual, Object expected, String message) {
if(expected == actual) {
failSame(actual, expected, message);
}
}
6、assertEquals
public static void assertEquals(Object actual, Object expected, String message) {
//判断expected是否是数组类型
if (expected != null && expected.getClass().isArray()) {
assertArrayEquals(actual, expected, message);
return;
}
assertEqualsImpl(actual, expected, message);
}
数组类型的判断
private static void assertArrayEquals(Object actual, Object expected, String message) {
if (expected == actual) {
return;
}
if (null == expected) {
fail("expected a null array, but not null found. " + message);
}
if (null == actual) {
fail("expected not null array, but null found. " + message);
}
//is called only when expected is an array
if (!actual.getClass().isArray()) {
failNotEquals(actual, expected, message);
}
int expectedLength = Array.getLength(expected);
//判断长度是否一致
if (expectedLength != Array.getLength(actual)) {
failNotEquals(Array.getLength(actual), expectedLength, message == null ? "" : message
+ " (Array lengths are not the same)");
}
for (int i = 0; i < expectedLength; i++) {
Object _actual = Array.get(actual, i);
Object _expected = Array.get(expected, i);
try {
assertEquals(_actual, _expected);
} catch (AssertionError ae) {
failNotEquals(actual, expected, message == null ? "" : message
+ " (values at index " + i + " are not the same)");
}
}
}
非数组类型的判断:assertEqualsImpl
private static void assertEqualsImpl(Object actual, Object expected,
String message) {
if((expected == null) && (actual == null)) {
return;
}
//^异或,相同则为0,不同则为1
if(expected == null ^ actual == null) {
failNotEquals(actual, expected, message);
}
if (expected.equals(actual) && actual.equals(expected)) {
return;
}
failNotEquals(actual, expected, message);
}