พัฒนา Spring MVC แบบ TDD ตอนที่ 1

TDD หรือ Test Driven Development คืออะไร? สรุปสั้นๆ คือ “เขียน Test ก่อนเขียน Code” ถ้าแบบยาวๆ แนะนำให้ไปอ่านบทความของคุณ b.architect roofimon ที่เว็บ Code 66 หรือของเว็บ Levelup Studio น่าจะดีกว่า

ผมลองค้น Google เพื่อหารูปอธิบาย ผมเจอรูปนี้ผมชอบมาก สามารถบรรยายได้ด้วยภาพเดียว

ที่มา: Modern Software Development ใน Google+
ที่มา: Modern Software Development ใน Google+

เครื่องมือ


ผมใช้

  1. JDK 6
  2. Eclipse Kepler SR2
  3. Maven 3.0.5

Maven ที่แถมมากับ Eclipse เป็น version 3.0.4 ก็ใช้ได้ แต่ผมเคยใช้แบบลงแยกมาก่อนหน้านี้ ก็เลยเอามาใช้ จะได้ไม่ต้องโหลด dependencies ใหม่
Maven on Eclipse

หัวข้อโปรเจค


นั่งคิดอยู่นานว่าจะทำเกี่ยวกับอะไรดีที่จะไม่ซ้ำกับชาวบ้าน เลยนึกถึง facebook แต่ขอทำแบบจิ๋วๆ ซึ่งน่าจะยังไม่มีคนทำตัวอย่างแนวนี้ เอาพอให้เป็นตัวอย่างการทำ TDD แค่นั้น โดยมี Requirement ประมาณนี้ (อาจจะมีการตัดออกได้โดยไม่แจ้งให้ทราบล่วงหน้า เผื่อเขียนแล้วยืดยาว)

  • Register
  • Add Friend
  • Post
  • Comment

เตรียมเครื่องมือ


  1. เปิด Eclipse แล้ว New Maven Project โดยทำเครื่องหมายถูกในกรอบสีแดงด้วย
    new maven project
  2. พิมพ์ Group Id, Artifact Id แล้วเลือก Packaging เป็น “war” แล้วกดปุ่ม Finish
    maven project packaging type war
  3. เนื่องจากค่า default ตอนสร้างโปรเจคใน Eclipse ใช้ JDK 5
    warning jdk5

    จึงต้องทำการเปลี่ยนใน Build Path ให้เป็น JDK 6
    change to jdk6

  4. สั่ง Show View -> Maven -> Maven Repository จากนั้นคลิกขวาที่ Local Repository แล้วเลือก Rebuild Index และทำกับ central ด้วย (เพื่อใช้ประโยชน์ในข้อถัดไป)
    Maven rebuild index
  5. เปิดไฟล์ pom.xml แล้วเลือกแท็บ Dependencies แล้วกดปุ่ม Add ดังนี้(หากไม่ทำตามขั้นตอนที่แล้ว เวลาพิมพ์เพื่อค้นหาจะไม่ปรากฏ Dependency ให้ค้นหา)
    spring-webmvc
    2014-04-19 16_42_01-Java - minifacebook_pom.xml - Eclipse

    servlet-api
    2014-04-19 18_15_08-Select Dependency

    jsp-api
    2014-04-19 18_16_05-Select Dependency

    slf4j-log4j
    2014-04-19 16_44_11-Select Dependency

    spring-test
    2014-04-19 16_49_21-Select Dependency

    junit
    2014-04-19 16_50_00-Select Dependency

  6. เปิดแท็บ pom.xml แล้วเพิ่ม encode UTF-8 ต่อท้ายแท็ก packaging ดังนี้

    <properties>
    	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    
  7. สร้างไฟล์ log4j.properties เก็บไว้ใน src/main/resources/
    # Root logger option
    log4j.rootLogger=INFO, stdout

    # Direct log messages to stdout
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.Target=System.out
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

ส่งท้าย


กว่าจะ Setup ให้พร้อมทำงานได้ เสียพลังงานไปเยอะพอสมควร ตอนหน้าก็จะมาเริ่มเขียน Test แรกกันซักที
แถมท้ายเป็น pom.xml แบบเต็ม

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.magicalcyber.minifacebook</groupId>
	<artifactId>minifacebook</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>
	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>
	<dependencies>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>servlet-api</artifactId>
			<version>2.5</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>javax.servlet.jsp</groupId>
			<artifactId>jsp-api</artifactId>
			<version>2.1</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>3.2.8.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>3.2.8.RELEASE</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>1.7.7</version>
		</dependency>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.11</version>
			<scope>test</scope>
		</dependency>
	</dependencies>
</project>

3 thoughts on “พัฒนา Spring MVC แบบ TDD ตอนที่ 1

  1. บทความที่ code66 เขียนโดย roofimon ครับ
    ส่วน b.architect เป็นคนที่คอมเมนท์คนแรกเฉยๆ

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s