[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 sent to your email.