實際開發中,除了開發,我想測試也是必不可少的一環吧。從簡單的@Test 、main 方法測試 到 頁面測試 ,斷言,postman。 bug是無處不在,隨時發生的事,高效率的調試、檢測可以節省大量的開發時間。 思路一確定,敲代碼也就花不了多少時間,可是敲完代碼后的調試,檢測往往會花費許多時間。 甚者除了頁面調試(通過jsp,HTML頁面帶參過來到后台,后台返回參數給頁面) 其他的一點都不會。記得去年的時候,公司做個金融產品,是跟外部的團隊合作一起開發的。由於前端頁面是由外部團隊提供給我們的,所以有時候他們還未提供給我們頁面的時候,我們就自己根據接口文檔等把后台業務相關邏輯處理好。 某天上午,公司一個新來的新手跑過來問我:XXX, 代碼寫完啦,沒有頁面怎么測啊。 我當時就感到奇怪,沒有頁面就不能測嗎? 我反問了他一句, 他請我過去幫忙教教他,我也就回了句自己去百度就沒理了。那時候想着就是雖然測試不是我們的主業,有測試,可是我們開發人員自測的手段還是要有一些的吧。剛好現在已經開始寫博客了,今天也有空,也就寫篇相關的博客,記錄記錄
閱讀此篇博客前閱讀本人的junit 常用注解 + junit 斷言詳解 + junit 運行(eclipse + IDEA)
1. @Test , main 方法
這個是最簡單測試了,一般用於測試一些方法,實現,比如你寫了個方法,要想看看能不能用,寫了一個算法,想看看對不對,你就可以通過這些方法來測試。
2. junit 常用注解 + junit 斷言 Assert(請結合junit 常用注解 + junit 斷言詳解這篇博客 理解):
//junit 測試(包括斷言,測試集等) public class Test3 { /* @BeforeClass public static void beforeClass(){ System.out.println("beforeClass"); } @Before public void before(){ System.out.println("before"); }*/ @Test(timeout = 10) public void test1(){ Assert.assertEquals(1,1); // Assert.fail("fail"); } @Test(expected = ArithmeticException.class) public void test2(){ boolean flag = true; Assert.assertTrue(flag); Assert.assertEquals(1,1); } @Ignore public void ignore(){ System.out.println("ignore"); } /* @After public void after(){ System.out.println("after"); } @AfterClass public static void afterClass(){ System.out.println("afterClass"); } */ }
3.junit 對SpringMVC 的Controller 進行測試:(注意這是基於ssm 框架 web 工程 的spring MVC,像spring boot 集成的是不一樣的):
// 使用spring 測試集測試 @RunWith(SpringJUnit4ClassRunner.class) // 配置上下文配置 @ContextConfiguration("classpath*:spring-mvc.xml") public class TestController { // 模擬request,response private MockHttpServletRequest request; private MockHttpServletResponse response; // 注入loginController @Autowired private LoginController loginController ; // 執行測試方法之前初始化模擬request,response @Before public void setUp(){ request = new MockHttpServletRequest(); request.setCharacterEncoding("UTF-8"); response = new MockHttpServletResponse(); } /** * @Title:testLogin * @Description: 測試用戶登錄 */ @Test public void testLogin() { try { request.setParameter("userName", "admin"); request.setParameter("password", "2"); Assert.assertEquals("login",loginController.loginTest(request,response)) ; } catch (Exception e) { e.printStackTrace(); } } }
4. postman 自測 (postman 一般是用於自測 restful 類型的接口, 用於自測前后端對接調用的接口等)(這是postman的基礎功能 ): 請參考 https://blog.csdn.net/fxbin123/article/details/80428216 個人認為講的較詳細了