目錄java
References:git
簡單介紹一下概念。github
下載 JUnit-xxx.jar (下載地址) 和 Hamcrest(點擊直接下載) ,放在一個文件夾下web
public class Calculator { public int evaluate(String expression) { int sum = 0; for (String summand: expression.split("\\+")) sum += Integer.valueOf(summand); return sum; } }
javac Calculator.java
目錄下出現 Calculator.class
spring
Test.java
文件:import static org.junit.Assert.assertEquals; import org.junit.Test; public class CalculatorTest { @Test public void evaluatesExpression() { Calculator calculator = new Calculator(); int sum = calculator.evaluate("1+2+3"); assertEquals(6, sum); } }
以上。express
Test.java
:# Linux or MacOS javac -cp .:junit-4.XX.jar:hamcrest-core-1.3.jar CalculatorTest.java # Windows javac -cp .;junit-4.XX.jar;hamcrest-core-1.3.jar CalculatorTest.java
以上。bash
# Linux or MacOS java -cp .:junit-4.XX.jar:hamcrest-core-1.3.jar org.junit.runner.JUnitCore CalculatorTest # Windows java -cp .;junit-4.XX.jar;hamcrest-core-1.3.jar org.junit.runner.JUnitCore CalculatorTest # 如下爲輸出: JUnit version 4.12 . Time: 0.006 OK (1 test)
Test.java
中修改assert相關項,重複 4-5,輸出以下:JUnit version 4.12 .E Time: 0.006 There was 1 failure: 1) evaluatesExpression(CalculatorTest) java.lang.AssertionError: expected:<8> but was:<6> at org.junit.Assert.fail(Assert.java:88) at org.junit.Assert.failNotEquals(Assert.java:834) ... FAILURES!!! Tests run: 1, Failures: 1:
package fc.learn.java.junit; public class BaobaoFeng { public void awei18shi(){ laohanTuiche(); guanyinzuolian(); zhongchu(); dulongzuan(); } public void laohanTuiche(){ System.out.println("laohantuiche!"); } private void guanyinzuolian(){ System.out.println("guanyinzuolian!"); } private int zhongchu(){ return 1; } public String dulongzuan(){ return "dulongzuan!"; } public String lianxuzhongchu(int param){ if (param < 5){ throw new IllegalArgumentException("test exception!"); } return "lianxuzhongchu"; } }
以上。intellij-idea
BaobaoFeng
出,點開 quickLips:BaobaoFengTest.java
。能夠看到,這裏不支持private方法的。package fc.learn.java.junit; import org.junit.After; import org.junit.Before; import org.junit.Test; public class BaobaoFengTest { BaobaoFeng fengbaobao; @Before public void setUp() throws Exception { } @After public void tearDown() throws Exception { } @Test public void awei18shi() { } @Test public void laohanTuiche() { } @Test public void dulongzuan() { } @Test public void lianxuzhongchu(){ } }
以上。app
Test.java
中的對應方法編寫測試用例,而後右鍵運行便可。dulongzuan()
方法的返回值,能夠以下:@RunWith
和@ContextConfiguration
:@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = "classpath:/config/context/appcontext-*.xml") public class TryJunitDaoTest { @Autowired TryJunitDao tryJunitDao; @Test @Transactional // 此處加上Transactional註解,測試完成以後會回滾 public void insert() { TryJunitDto dto = new TryJunitDto(); tryJunitDao.insert(dto) } @Test public void select() { TryJunitDto dto = tryJunitDao.select(); Assert.assertNotEquals(dto, null); } }
實際上,模擬請求,關鍵是Mock
,和JUnit關係不是特別大。框架
Test.java
文件,而後@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:/config/spring/appcontext-*.xml", "file:src/main/webapp/WEB-INF/servlet-context.xml" }) public class MockRequestControllerTest { @Autowired private MockRequestController mockRequestController; @Test public void testAcceptRequest() throws Exception { // 這裏,構造 MockRequest MockHttpServletRequest request = new MockHttpServletRequest(); request.setAttribute("user", "user"); mockRequestController.acceptRequest(request); } }