Saturday, June 03, 2006

TestNG in Maven2

ช่วงนี้อยู่ในช่วง kickoff project ตัวใหม่อยู่
โปรเจคนี้ผมตัดสินใจใช้ Framework, Library Release ใหม่ทั้งหมด
รวมทั้งขยับขึ้นไปใช้ jdk1.5

ศึกแรกที่ต้องเจอ ก็คือ Maven2 กับ TestNG
ตัว TestNG เคยเขียนไปแล้วที่ post นี้ Link
(ผ่านมาปีหนึ่งแล้ว พึ่งได้ใช้จริงๆจังๆ)

ใน maven2 เราสามารถใช้ TestNG ได้เลย (Out of a box)
โดยมีสิ่งที่ต้องทำดังนี้
  • เพิ่ม dependency เข้าไปดังนี้
        <dependency>
    <groupId>org.testng</groupId>
    <artifactId>testng</artifactId>
    <version>4.7</version>
    <scope>test</scope>
    <classifier>jdk15</classifier>
    </dependency>

  • ระบุว่าต้องการใช้ Jdk1.5 ในการ compile
     <build> 
    <plugins>
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.0</version>
    <configuration>
    <source>1.5</source>
    <target>1.5</target>
    </configuration>
    </plugin>
    </plugins>
    </build>



จากนั้นเมื่อต้องการ run test ก็แค่
mvn test


ดูง่ายๆเลย
ทลลอง run ดู ปรากฎว่า run test ไม่ผ่าน
เปลี่ยนไป run ใน eclipse ด้วย plugin ของ TestNG
อ้าว ผ่านแฮะ

error ที่ปรากฎ

-------------------------------------------------------
T E S T S
-------------------------------------------------------
[surefire] Running pok.MyTest
[surefire] Tests run: 1, Failures: 1, Errors: 0, Time elapsed: 0.072 sec <<<<<<<< FAILURE !!

Results :
[surefire] Tests run: 1, Failures: 1, Errors: 0

ที่หนักว่านั้นก็คือ เมื่อทดลอง copy ไป run บน Linux box บ้าง
(เดิม run บน Mac)
ผลที่ได้

-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running pok.MyTest
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.056 sec

Results :
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0

ไม่ error แต่ ไม่ run
อย่างนี้ก็แสดงว่า Surefire
(plugin ของ Maven ที่รับผิดชอบในเรื่่อง Testing)
ต้องการให้เราระบุ สิ่งที่ต้องการจะ run ด้วย
ซึ่งทำได้โดยการเพิ่ม Suite file เข้าไปอีก 1 file
เพื่อระบุสิ่งที่ต้องการ run
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name="Suite1" verbose="1" >
<test name="Domain" >
<packages>
<package name="pok.*" />
</packages>
</test>
</suite>

และระบุเพิ่มใน pom ดังนี้
      <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<suiteXmlFiles>
<suiteXmlFile>testng.xml</suiteXmlFile>
</suiteXmlFiles>
</configuration>
</plugin>


ส่วนใน Mac ผมลองลบ repository ของ maven ทิ้ง
สั่งทำงานใหม่ (มันก็จะ load repository มาให้ใหม่)
อาหารหายเป็นปลิดท้ิง
แสดงว่ามีปัญหาเรื่อง version ของ jar file ที่ download มา

เฮ้อ เกือบถอดใจหันกลับไปใช้ JUnit กับ maven1.x เหมือนเดิมแล้วสิ

Related link from Roti

No comments: