Bagaimana Membuat Automatisasi build dan Run Test dengan NAnt.
Dalam post sebelumnya saya telah menerangkan bagaimana mempersiapakan lingkungan NHibernate. Disini saya akan menerangkan bagaimana file build dengan NAnt.
Apa itu NAnt? Saya tidak akan menerangkan lebih jauh, singkatnya atau salah satu kegunaanya adalah untuk mengkompile program .Net. Selain mengkompile kita juga akan menggunakan NAnt untuk menjalankan test.
Apa yang harus dipersiapkan? Karena Operating System kita UBuntu, gunakan Synaptic Package Manager untuk instalasinya, jika belum terinstall. Untuk memastikan sudah terintall atau belum, Ketik NAnt di terminal, dan anda akan mendapat pesan berikut:
fatur@fatur-laptop:~$ nant
NAnt 0.85 (Build 0.85.2478.0; release; 10/14/2006)
Copyright (C) 2001-2006 Gerry Shaw
http://nant.sourceforge.net
BUILD FAILED
Could not find a ‘*.build’ file in ‘/home/fatur’
For more information regarding the cause of the build failure, run the build again in debug mode.
Try ‘nant -help’ for more information
Jika pesan diatas sudah keluar, itu artinya NAnt sudah terinstall.
File Build
Dalam post sebelumnya saya telah terangkan struktur file dan folder dari project. Didalam folder project terdapat file project.build. Apa isi file itu?
File build berformat xml. Ujung paling atas dari xml ini adalah tag project:
<project name="Sampel.NHibernate" default="run-tests"> </project>
Tag ini menyatakan, project bernama “Sampel.NHibernate”. Default target yang akan dipanggil NAnt bernama “run-tests”.
Property Project
Didalam tag project terdapat tag property yang berisi variabel-variabel project:
<property name="build.dir" value="build" /> <property name="asm.test.name" value="fatur.sample.NHibernateHelloWorldTest" /> <property name="src.test.dir" value="src/test"/> <property name="build.debug" value="true"/> <property name="lib.dir" value="lib"/> <property name="asm.app.name" value="fatur.sample.NHibernateHelloWorld" /> <property name="src.app.dir" value="src/app"/> <property name="nhibernate.lib.dir" value="tools/nhibernate/bin/net-2.0"/> <property name="npsql.lib.dir" value="tools/postgres"/>
Property build.dir, src.test.dir, lib.dir, src.app.dir, nhibernate.lib.dir, npsql.lib.dir masing-masing berisi variabel path dari sebuah folder. Root dari folder-folder ini adalah folder project.
Property asm.test.name menyatakan nama assembly dari test. Begitu juga dengan property asm.app.name menyatakan nama assembly dari applikasi/library.
Property build.debug menyatakan apakah status dari project ini. Property ini akan dipakai NAnt untuk memberitahu kompiler mengenai perlu tidaknya membuat file debug.
Application Build Target
Pertama-tama yang harus dilakukan oleh NAnt adalah mengkompile aplikasi. Berikut ini adalah tag target untuk kompilasi applikasi:
<target name="build-app" description="Compile application sources into library">
<csc target="library" debug="${build.debug}" output="${build.dir}/${asm.app.name}.dll">
<sources refid="app.sources"/>
<references refid="app.references" />
</csc>
</target>
Target bernama build-app. Target ini memanggil tag csc. NAnt akan mengarahkan kompilasi ke mono. Target dari kompilasi ini adalah library. Tag source menyatakan lokasi file source code, disini mengarah ke fileset app.source:
<fileset id="app.sources" failonempty="true">
<include name="${src.app.dir}/*/*.cs" />
</fileset>
Fileset menyatakan, “semua file yang berekstensi cs dalam source directory dan sub directory didalamnya”.
Sedangkan tag references menyatakan lokasi file reference library dari luar applikasi, disini mengarah ke fileset app.references:
<assemblyfileset basedir="${build.dir}" id="app.references">
<include name="System.dll" />
</assemblyfileset>
Kebetulan kita hanya merefensi System.dll.
Untuk menjalankan target ini, cukup ketikkan NAnt [nama target]:
fatur@fatur-laptop:/media/Data/Fatur.Data/workspace/project/NHibernate$ nant build-app
NAnt 0.85 (Build 0.85.2478.0; release; 10/14/2006)
Copyright (C) 2001-2006 Gerry Shaw
http://nant.sourceforge.net
Buildfile: file:///media/Data/Fatur.Data/workspace/project/NHibernate/project.buid
Target framework: Mono 2.0 Profile
Target(s) specified: build-app
build-app:
BUILD SUCCEEDED
Total time: 0.2 seconds.
Jangan lupa untuk mounting terlebih dahulu ke folder project. Jika source code belum ada buat sebuah file berekstensi cs dan letakkan dalam folder source.
Test Build Target
Target untuk buil source code test hampir sama dengan target build untuk applikasi. Bedanya terletak pada dependency library, baik terhadap tools (nunit dan nhibernate) juta terhadap library yang akan kita test.
<target name="build-test" depends="build-app, copy-asm, copy-nhibernate-lib" description="Compile test sources into library">
<csc target="library" debug="${build.debug}" output="${build.dir}/${asm.test.name}.dll">
<sources refid="test.sources"/>
<references refid="test.references" />
</csc>
</target>
Attribute depends menyatakan kalau target ini tergantung pada beberapa target lain. Target-target lain ini harus di jalankan terlebih dahulu. Jadi, build.app akan dijalankan, kemudian copy-asm dan copy-nhibernate-lib. Berikut ini adalah target masing-masing copy:
<target name="copy-asm" description="Copy library from lib to build for references">
<copy todir="${build.dir}">
<fileset basedir="${lib.dir}">
<include name="nunit.framework.dll" />
<include name="NMock2.dll" />
</fileset>
</copy>
</target>
Target diatas mengkopi nunit.framework dan NMock dari lib ke build.
<target name="copy-nhibernate-lib" description="Copy NHibernate library from lib to build for references">
<copy todir="${build.dir}">
<fileset basedir="${nhibernate.lib.dir}">
<include name="*.dll" />
</fileset>
</copy>
</target>
Target diatas mengkopi semua library yang ada didalam folder nhibernate ke dalam folder build.
Sementara tag source dan reference masing-masing bisa dilihat dibawah ini:
<fileset id="test.sources" failonempty="true">
<include name="${src.test.dir}/*/*.cs" />
</fileset>
<assemblyfileset basedir="${build.dir}" id="test.references">
<include name="System.dll" />
<include name="nunit.framework.dll"/>
<include name="NMock2.dll"/>
<include name="${asm.app.name}.dll"/>
<include name="NHibernate.dll"/>
</assemblyfileset>
Cukup jelas.
Untuk menjalankan target ini ketikkan NAnt build-test:
fatur@fatur-laptop:/media/Data/Fatur.Data/workspace/project/NHibernate$ nant build-test
NAnt 0.85 (Build 0.85.2478.0; release; 10/14/2006)
Copyright (C) 2001-2006 Gerry Shaw
http://nant.sourceforge.net
Buildfile: file:///media/Data/Fatur.Data/workspace/project/NHibernate/project.build
Target framework: Mono 2.0 Profile
Target(s) specified: build-test
build-app:
copy-asm:
copy-nhibernate-lib:
build-test:
BUILD SUCCEEDED
Total time: 0.2 seconds.
Running Test
Untuk menjalankan test tidaklan susah, cukup sediakan semua dependency, library test, library yang hendak ditest dan tentu saja NUnit. Target untuk running test bisa anda lihat dibawah ini:
<target name="run-tests"depends="build-test, copy-hbm-file, copy-nhibernate-config, copy-npgsql-lib" description="Run NUnit tests">
<nunit2>
<formatter type="Xml" usefile="true" extension=".xml" outputdir="${build.dir}"/>
<test assemblyname="${build.dir}/${asm.test.name}.dll"/>
</nunit2>
</target>
Kita perlu mengkopi file-file hbm (kita akan bahas dipost berikutnya), file configurasi nhibernate, dan driver postgres untuk nhibernate, npsql. Masing-masing target bisa anda lihat dibawah ini:
<target name="copy-hbm-file" description="Copy hbm file to build for mapping run test">
<copy todir="${build.dir}">
<fileset basedir="${src.app.dir}/fatur.sample.NHibernateHelloWorld/mapping">
<include name="Product.hbm.xml" />
</fileset>
</copy>
</target>
Hbm yang kita kopi adalah hbm yang berada didalam source code applikasi.
<target name="copy-nhibernate-config" description="Copy Nhibernate config to build for nunit run test">
<copy todir="${build.dir}">
<fileset basedir="${src.test.dir}/fatur.sample.NHibernateHelloWorldTest">
<include name="hibernate.cfg.xml" />
</fileset>
</copy>
</target>
File konfigurasi nhibernate bernama hibernate.cfg.xml, sementara ini saya letakkan didalam sourcecode test. Jika project banyak, file ini bisa diletakkan didalam folder khusus, katakanlah “config” dibawah folder project langsung atau sejajar dengan folder src.
<target name="copy-npgsql-lib" description="Copy npgsql lib to build for db connection run test">
<copy todir="${build.dir}">
<fileset basedir="${npsql.lib.dir}">
<include name="*.dll" />
</fileset>
</copy>
</target>
Target ini mengkopi driver npsql.
Untuk menjalankan target ini, cukup ketikkan NAnt, nant akan menjalankan test karena test adalah default target.
What Next
Source lengkap dari file ini dapat anda lihat di nhibernate project.build. Berikutnya kita akan membahas bagaimana mengkoneksikan domain dengan database menggunakan NHibernate.