[SPRING] สวัสดีชาวโลก

หลังจาก Blog ตอนที่แล้ว ผมได้เขียนเกี่ยวกับเขียน Spring โดยใช้ VSCode ครับ ซึ่งจาก Blog ตอนก่อน ยังติดปัญหาอยู่ที่ว่าเว็บทำงานแล้ว แต่ไม่มีการแสดงผลอะไรทั้งนั้นเลย ซึ่งใน Blog ตอนนี้ผมจะมาทำ Hello world ครับ

สิ่งที่ต้องเตรียม

  • งานที่ทำจาก Blog ตอนก่อนหน้าครับ
  • ถ้าไม่ได้เริ่มมาจาก Blog ผม ก็สามารถเพิ่ม Dependency ไปที่ไฟล์ pom.xml  ดังนี้
    <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-test</artifactId>
       <scope>test</scope>
    </dependency>

ลุยยเลยครับ

  • มาดูโครงสร้างของ Project กันก่อนครับ
    src
    -> main
       -> java (ภาษาที่ใช้)
          -> com (Package#01)
    	  -> cu (Package#02)
                 -> thesis (Package#03)
                        -> WeMuBPMN (Project)
                           -> hello
                              HelloController.java (กำลังเพิ่ม)
       -> resource
          -> static << เอาไว้เก็บพวก CSS / Java 
          -> templates
          application.properties << ไฟล์นั้สำคัญนะ เดี๋ยว Config บางเรื่อง เช่น Database จะถูกเก็บไว้ที่นี่
    -> test
       -> java (ภาษาที่ใช้)
          -> com (Package#01)
    	  -> cu (Package#02)
                 -> thesis (Package#03)
    	        -> WeMuBPMN (Project)
                       -> hello
                          HelloControllerTest.java (กำลังเพิ่ม)
    pom.xml << จัดการกับ Dependency ทั้งหลาย
  • สิ่งที่ผมเพิ่มเข้าไป คือ โพลเดอร์ hello ทั้งใน main และส่วนของ test ครับ
  • เพิ่มไฟล์ HelloController.java  เข้าไปที่ Path /j่ava/main/com/cu/thesis/WeMuBPMN/hello/  ครับ
  • เริ่ม Code กันเลยครับ โดยผมต้องการว่า ถ้ามี Request เข้ามาที่ url http://localhost:8080/hello  ให้ระบบแสดงคำว่า

    สวัสดีชาวโลก

  • มาดูที่ Code กันครับ ซึ่งมีสิ่งที่ต้องสนใจ ดังนี้
    package com.cu.thesis.WeMuBPMN.hello;
    
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class helloController{
        @RequestMapping("/hello")
        public String index() {
            return "สวัสดีชาวโลก";
        }
    
    }
    • @RestController  เป็นสิ่งที่ทำใหเ ClasshelloController  เป็น WebService แล้วครับ
    • จากนั้นลองมาดูที่ Method Index ครับ สิ่งที่ผมทำ คือ ถ้ามี Request /hello  มา ตัว @RequestMapping  จะดักไว้ครับ เอาง่ายๆ ถ้ามีอะไร /hello เข้ามา Method Index ทำงานครับ
  • มาทดสอบผ่านหน้าเว็บกันครับ
  • บอกไปว่ามันเป็น WebService งั้นลองผ่าน Postman กันดีกว่า
  • และสุดท้าย ถ้าต้องการให้มันดูมีมูลค่า เรามาทำ Unit Test กันครับ
    • สร้างไฟล์ HelloControllerTest.java  ตาม Path /j่ava/main/com/cu/thesis/WeMuBPMN/hello/ เลยครับ
    • จากนั้นเขียน Code ตามนี้เลยครับ โดยใช้ SpingMVCTest สำหรับช่วย Test ครับ
      package com.cu.thesis.WeMuBPMN.hello;
      
      import org.junit.Test;
      import org.junit.runner.RunWith;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
      import org.springframework.boot.test.context.SpringBootTest;
      import org.springframework.http.MediaType;
      import org.springframework.test.context.junit4.SpringRunner;
      import org.springframework.test.web.servlet.MockMvc;
      import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
      import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
      import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
      import static org.hamcrest.CoreMatchers.equalTo;
      
      @RunWith(SpringRunner.class)
      @SpringBootTest
      @AutoConfigureMockMvc
      public class HelloControllerTest {
      
          @Autowired
          private MockMvc mvc;
      
          @Test
          public void getHello() throws Exception {
              mvc.perform(MockMvcRequestBuilders.get("/hello").accept(MediaType.APPLICATION_JSON))
                      .andExpect(status().isOk())
                      .andExpect(content().string(equalTo("สวัสดีชาวโลก")));
          }
      }
      • @SpringBootTest  เป็นตัวที่บอกว่าเราใช้ Framework การ Test ของ SpringBoot
      • @AutoConfigureMockMvc  เป็นตัวบอกว่า MockMVC ใช้ค่าตั้งต้นครับ ไม่ต้องอ่าน Config จาก xml ที่ไหนอีก และตัวแปร mvc จะถูกยิง MockMVC Class เข้าไป เพราะได้กำหนด @Autowired  ไว้ครับ
      • @Test  เป็นตัวบอกว่า Method เป็น Test Case อันหนึ่งของเราครับ โดยใช้ตัว MVCMock เข้ามาช่วยในการดีงค่า และทดสอบผลลัพธ์ที่ได้ครับ โดยทำการดึงค่า
        • Status = isOK (Http Response Code 200)
        • Content มีค่าเท่ากับ "สวัสดีชาวโลก" ครับ
    • ลองมารัน Test ครับ สังเกตุดีว่าจะมีเครื่องหมายถูกสีเขียวด้วย
    • ถ้ามือบอนทำ Fail หละ ผลที่ได้จะเป็นไปตามนี้ครับ

Blog ตอนต่อไปจะเป็น สวัสดีชาวโลก แบบที่มี View แล้ว จะได้มีความสวยงาม ^__^

 

 


Discover more from naiwaen@DebuggingSoft

Subscribe to get the latest posts to your email.