完整版見https://jadyer.github.io/2013/07/09/junit-hamcrest/
package com.jadyer.service;
import java.util.HashMap;
import java.util.Map;
import org.hamcrest.Matchers;
import org.junit.Assert;
import org.junit.Test;
/**
* 使用Hamcrest增強JUnit的測試能力
* @see Hamcrest架構提供了一些相對通俗并高效的方法來進行一些junit比較困難的測試
* @see 比如比較數值大小、測試對象類型、測試數組元素等等
* @see Hamcrest下載下傳位址為https://code.google.com/p/hamcrest/downloads/list
* @see JUnit下載下傳位址為https://github.com/junit-team/junit/wiki/Download-and-Install
* @see ------------------------------------------------------------------------------------------------
* @see 1)所需jar(有兩個)
* @see junit-4.10.jar
* @see hamcrest-all-1.3.jar
* @see ------------------------------------------------------------------------------------------------
* @see 2)注意事項
* @see 測試時可能報告類似這個的異常java.lang.NoSuchMethodError: org.hamcrest.core.AllOf.allOf
* @see 這時隻需将hamcrest.jar移到junit.jar的前面就可以了,否則組合條件如allOf、anyOff等都會抛此異常
* @see ------------------------------------------------------------------------------------------------
* @create Jul 6, 2013 5:11:27 PM
* @author 玄玉<http://blog.csdn.net/jadyer>
*/
public class TestByHamcrest {
/**
* 如果用的是JUnit-4.10,那麼這裡可以使用org.junit.Assert類,它提供了assertThat的功能
* 如果用的是JUnit低版本,如MyEclipse6.5自帶的JUnit-4.3.1則未提供Assert.assertThat功能
* 這時可以使用hamcrest-all-1.3.jar自帶的org.hamcrest.MatcherAssert.assertThat()方法
*/
@Test
public void testHamcrest(){
//50是否大于20
Assert.assertThat(50, Matchers.greaterThan(20));
//50是否大于或等于50
Assert.assertThat(50, Matchers.greaterThanOrEqualTo(50));
//50是否即大于20又小于60(allOf方法類似于Java中的&&)
Assert.assertThat(50, Matchers.allOf(Matchers.greaterThan(20), Matchers.lessThan(60)));
//50是否大于20或小于40(anyOf方法類似于Java中的||)
Assert.assertThat(50, Matchers.anyOf(Matchers.greaterThan(20), Matchers.lessThan(40)));
//測試"abc.txt"是否以"txt"結束
Assert.assertThat("abc.txt", Matchers.endsWith("txt"));
Assert.assertThat("abc.txt", Matchers.startsWith("ab"));
Assert.assertThat("abc.txt", Matchers.containsString("c.t"));
Assert.assertThat(22+"aa", Matchers.hasToString("22aa"));
Assert.assertThat("http://blog.csdn.net/jadyer", Matchers.instanceOf(String.class));
Assert.assertThat("http://blog.csdn.net/jadyer", Matchers.notNullValue());
Assert.assertThat(null, Matchers.nullValue());
//針對集合的測試
String[] users = {"玄玉", "Jadyer"};
Assert.assertThat(users, Matchers.hasItemInArray("玄玉"));
Map<String, String> userMap = new HashMap<String, String>();
userMap.put("11", "玄玉");
userMap.put("22", "Jadyer");
userMap.put("33", "http://blog.csdn.net/jadyer");
Assert.assertThat(userMap, Matchers.hasKey("22"));
Assert.assertThat(userMap, Matchers.hasValue("http://blog.csdn.net/jadyer"));
}
}