Testing dan Implementasi di Dunia Nyata(2)

Mengenal ASP.NET MVC 1: TDD


TDD atau Test Driven Development adalah suatu disiplin proses pembuatan software yang bersifat iteratif berdasarkan skenario testing yang telah dibuat sebelum penulisan source-code software dilakukan. Konsep kunci dalam TDD adalah adanya test yang telah dibuat terlebih dahulu sebelum sebuah fungsi dalam program dibuat. Keberadaan fungsi atau modul dalam program harus dibenarkan oleh adanya test yang dibuat berdasarkan suatu skenario.

Visual Studio 2008 menawarkan fitur-fitur untuk testing, khusus untuk edisi-edisi tertentu. Kita bisa menggunakan Visual Studio 2008 dengan fitur testing untuk melakukan test yang terotomatisasi. Namun sebagai pilihan lain, kita juga bisa menggunakan framework testing terpisah seperti nUnit. Dengan tool yang ada kita bisa melakukan pendekatan TDD terhadap program-program yang kita tulis.

ASP.NET MVC adalah framework yang dirancang untuk mudah digunakan dengan TDD. Hal ini didukung oleh arsitektur dasar MVC sendiri yang melakukan pembagian tugas yang jelas antara Model, View, dan Controller. Setiap unit, baik itu Model, View, maupun Controller bisa ditest sebagai unit terpisah dan berfokus kepada tanggung jawab dan pekerjaan masing-masing.

Framework ASP.NET MVC sendiri telah dirancang agar mudah digunakan dengan objek mock yang diperlukan dalam unit testing tertentu. Mock adalah objek-objek yang sengaja diciptakan untuk meniru objek yang sesungguhnya, namun jauh lebih sederhana dan bisa dikondisikan dengan konteks test unit tertentu. Objek-objek yang sering di-mock dalam sebuah program web diantaranya adalah HTTP Context, HTTP Request, dan HTTP Response.

Kita akan mendemokan bagaimana melakukan test unit terhadap program ASP.NET MVC yang sederhana. Mungkin demo ini tidak cukup untuk menggambarkan ASP.NET MVC dalam konteks proses pengembangan program yang menganut metodologi TDD, namun bisa mewakili salah satu aktifitas penting dalam TDD yaitu unit-testing.

Kita akan menggunakan library Moq untuk keperluan pembuatan mocking terhadap objek. Library Moq versi 2.6.1 bisa di-download dari alamat berikut ini: http://moq.googlecode.com/files/Moq.2.6.1014.1-bin.zip. Setelah di-download, ekstrak assembly Moq.dll lalu masukkan sebagai referensi lokal dalam project test dari solusi HelloWorld.sln kita.

Ikuti langkah-langkah berikut ini untuk mendemokan unit-testing dalam ASP.NET MVC:

  1. Buka solusi HelloWorld.sln, lalu tambahkan View dengan nama TddDemo.aspx. View ini akan menggunakan class Product sebagai Model yang sudah pernah kita tambahkan sebelumnya. HTML source dan code-behind dari View ini bisa dilihat dalam Listing di bawah ini.

    [Listing: HTML Source View TddDemo.aspx]

    [Listing: Code-Behind View TddDemo.aspx]

    View ini akan menampilkan detail dari produk yang diberikan oleh Controller dalam action-method TddDemo(). Perhatikan bahwa View ini memiliki Model yang strongly-typed, yaitu Product.

  2. Dalam HomeController, buatlah sebuah action-method baru bernama TddDemo(), seperti terlihat dalam Listing di bawah ini.

    [Listing: Action-Method TddDemo()]

    Yang dilakukan oleh action-method TddDemo() ini cukup sederhana, yaitu menginisialisasi sebuah objek dari class Product, kemudian memberikannya kepada View TddDemo.

  3. Dalam Solution Explorer klik kanan pada nama solusi-nya untuk memunculkan dialog menambahkan project baru seperti terlihat dalam Gambar di bawah ini. Pilih template Test Project, lalu ubah nama project-nya menjadi TestProject. Kemudian klik tombol OK.

    [Gambar: Kotak Dialog Test Project]

    Visual Studio 2008 secara otomatis akan membuatkan test project yang menjadi bagian dari solusi HelloWorld.sln. Dalam test project yang baru saja di-generate terdapat beberapa file yang dibuat secara otomatis untuk keperluan test manual. Kita tidak akan menggunakan test manual saat ini, oleh karena itu hapuslah file ManualTest dari TestProject.

  4. Tambahkan referensi terhadap assembly Moq.dll yang sudah kita download sebelumnya ke dalam TestProject. Lalu ubah nama UnitTest1.cs menjadi UnitTest.cs. Di dalam UnitTest.cs, tambahkan method static FakeHttpContext() seperti terlihat dalam Listing di bawah ini. Jangan lupa untuk menambahkan using Moq dalam source code.

    [Listing: Method FakeHttpContext()]

    Method FakeHttpContext() menggunakan library Moq untuk membuat objek-objek tiruan atau mock dari HTTP Context, HTTP Request, HTTP Response, HTTP Session, dan HTTP Server Utility. Setiap objek mempunyai implementasi default yang sudah dibuatkan oleh library Moq.

  5. Tambahkan dua variable private dalam class UnitTest bernama controller dan actionResult. Kemudian di dalam constructor dari class UnitTest, buatlah sebuah instance dari FakeHttpContext dan HomeController. Perhatikan Listing di bawah ini yang memperlihatkan bagaimana kita melakukan hal ini.

    [Listing: Constructor UnitTest()]

    Di dalam constructor, kita memanggil action-method TddDemo() secara ekplisit dengan memberikan ControllerContext yang sengaja kita buat dengan fakeHttpContext dan data routing kosong. Ketiadaan data routing di sini tidak menjadi masalah karena fokus test-nya sendiri ada pada Controller, View, dan Model.

  6. Buatlah sebuah test-method untuk melakukan pengecekan terhadap hasil dari pemanggilan action-method TddDemo(), seperti terlihat dalam Listing di bawah ini.

    [Listing: Test Terhadap TddDemo()]

    Dalam Listing di atas kita melakukan pengecekan apakah tipe data dari actionResult sama dengan ViewResult. Hal ini karena action-result TddDemo() seharusnya berupa ViewResult. Selain itu, kita juga melakukan pengecekan terhadap tipe data Model yang di-assign ke dalam variable controller.ViewData.Model yang seharusnya bertipe Product.

  7. Buatlah sebuah test-method untuk melakukan pengecekan terhadap model, seperti terlihat dalam Listing di bawah ini.

    [Listing: Test Terhadap Model]

    Di sini kita bisa melakukan asersi terhadap nilai properti-properti dari Model.

  8. Untuk melakukan test terhadap View, kita buat implementasi View sederhana yang akan mensubstitusi View default ASP.NET. Dalam unit testing kita tidak memerlukan View yang benar-benar melakukan rendering ke dalam output karena kita akan kesulitan melakukan asersi terhadap tampilan. Yang dilakukan dalam View substitusi adalah memberikan nilai yang kita harapkan, sehingga kita bisa melakukan asersi terhadap nilai ini. Listing di bawah ini menunjukkan definisi dari class TestView.

    [Listing: TestView]

    Yang kita lakukan dalam TestView adalah memberikan StatusCode 200 kepada FakeHttpContext yang bisa kita pakai dalam asersi nanti.

  9. Buatlah sebuah test-method untuk melakukan pengecekan terhadap View, seperti terlihat dalam Listing di bawah ini. Pengecekan yang dilakukan sederhana saja, yaitu dengan membandingkan StatusCode dari objek Response dengan 200.

    [Listing: Pengecekan Terhadap View]

  10. Kita jalankan semua test-method yang sudah kita definisikan di atas dalam Visual Studio 2008. Jika hasilnya sukses, test-result akan terlihat seperti dalam Gambar di bawah ini.

    [Gambar: Hasil Test Dalam Visual Studio 2008]

Seperti kita lihat dalam demo di atas, ASP.NET MVC memudahkan kita untuk melakukan unit-testing. Pembagian tugas dan tanggung jawab yang jelas antar komponen MVC memungkinkan kita melakukan test terhadap masing-masing komponen. Hal ini mendukung pengembangan software dengan metodologi TDD.

Sumber : http://netindonesia.net/blogs/suhanto/archive/2008/12/11/mengenal-asp-net-mvc-1-tdd.aspx

0 comments:

Post a Comment

 
 
 
 
Copyright © artikel39