หลังจาก 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.



