Programmer's Diary

Sebuah diary mahasiswa Teknik Informatika.

Posts Tagged ‘Unit Testing’

Unit Testing ASP.NET MVC 2 dengan Visual Studio 2010 – Part 2

Posted by Alexander Rahardjo on June 3, 2010

Pada kesempatan kali ini saya akan memaparkan mengenai Unit Testing pada Visual Studio 2010 yang berjalan pada OS Windows XP SP 3

Pada Unit Testing pertama-tama anda harus mempersiapkan aplikasi anda yang akan ditesting berikut dengan dokumen-dokumennya seperti usecase dan sequence diagram serta Test Skenario nya dimana yang telah saya paparkan pada artikel sebelumnya dan anda juga dapat dengan mudah melakukan generate sequence diagram seperti pada tutorial sebelumnya

Dalam tutorial ini saya menggunakan aplikasi ASP.NET MVC 2. 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. Oleh karena itu anda membutuhkan library Moq untuk keperluan pembuatan mocking terhadap objek. Library Moq versi terbaru bisa di-download dari alamat berikut ini: http://code.google.com/p/moq/ dan anda juga membutuhkan MvcMockHelpers yang dapat anda lihat di sini atau ini. Selanjutnya buka aplikasi anda 🙂

Langkah-langkahnya adalah sebagai berikut:

1. Buka project ASP.NET MVC 2 anda pada Visual Studio 2010

2. Pilih menu Test, lalu new test

3. Lalu akan keluar sebuah windows dimana anda harus memilih Unit Test Wizard dan isikan nama project test anda, dalam tutorial ini saya mengisikan MvcMusicStore.Tests, lalu klik Create

4. Setelah itu akan muncul windows lagi dimana anda harus memilih method pada project anda yang akan anda test, pada tutorial ini saya akan mengetes method LogOn() yang digunakan untuk Login, lalu klik OK

5. Kemudian secara otomatis Visual Studio 2010 akan melakukan generate pada program test anda.

6. Namun karena kita akan melakukan testing terhadap ASP.NET MVC 2, maka kita tidak akan bisa menggunakan code dasar yang di-generate oleh Visual Studio 2010. Yang anda harus lakukan adalah memberikan code sebagai berikut pada method tersebut:

            // Setup
            var formsAuthenticationMock = new Mock<IFormsAuthenticationService>();
            var membershipProviderMock = new Mock<IMembershipService>();

            AccountController target = new AccountController(formsAuthenticationMock.Object, membershipProviderMock.Object);
            target.SetFakeControllerContext();

            // Execute
            ViewResult result = target.LogOn() as ViewResult;

            // Verify
            ViewDataDictionary viewData = result.ViewData;
            Assert.AreEqual("LoginGet", viewData["Title"]);
            Assert.AreEqual(1, viewData.Count);

7. Setelah itu jangan lupa anda perlu menghapus code bagian ini pada method tersebut, karena testing akan berjalan bukan pada browser.

        [HostType("ASP.NET")]
        [AspNetDevelopmentServerHost("C:\\Documents and Settings\\Alexander Rahardjo\\Desktop\\Verval_MusicStoreMVC\\tutorial\\2\\Source\\MvcMusicStore", "/")]
        [UrlToTest("http://localhost:1397/")]

8. Maka secara keseluruhan code anda akan menjadi seperti ini

        [TestMethod()]
        public void LogOnTest()
        {
            // Setup
            var formsAuthenticationMock = new Mock<IFormsAuthenticationService>();
            var membershipProviderMock = new Mock<IMembershipService>();

            AccountController target = new AccountController(formsAuthenticationMock.Object, membershipProviderMock.Object);
            target.SetFakeControllerContext();

            // Execute
            ViewResult result = target.LogOn() as ViewResult;

            // Verify
            ViewDataDictionary viewData = result.ViewData;
            Assert.AreEqual("LoginGet", viewData["Title"]);
            Assert.AreEqual(1, viewData.Count);
        }

9. Lalu setelah ini anda perlu melakukan klik kanan pada method yang akan di tes tadi dan pilih Run Tests

10. Dan berikut adalah hasilnya pada Test Results

11. Setelah itu pada tutorial ini saya mengetes 2 method LogOn() yang awalnya saya test adalah LogOn() untuk GET dan sekarang akan saya test LogOn() untuk POST

12. Dan berikut adalah contoh code untuk LogOn() POST:

        [TestMethod()]
        public void LogOnTest2()
        {
            //AccountController target = new AccountController(); // TODO: Initialize to an appropriate value
            //ActionResult expected = null; // TODO: Initialize to an appropriate value
            //ActionResult actual;
            //actual = target.LogOff();
            //Assert.AreEqual(expected, actual);
            //Assert.Inconclusive("Verify the correctness of this test method.");

            // Setup
            var formsAuthenticationMock = new Mock<IFormsAuthenticationService>();
            var membershipProviderMock = new Mock<IMembershipService>();

            string username = "Administrator";
            string password = "password123";
            string returnUrl = "StoreManager";
            bool rememberMe = false;

            LogOnModel model = new LogOnModel();
            model.UserName = username;
            model.Password = password;
            model.RememberMe = rememberMe;

            formsAuthenticationMock.Expect(f => f.SignIn(username, rememberMe));

            AccountController target = new AccountController(formsAuthenticationMock.Object, membershipProviderMock.Object);
            target.SetFakeControllerContext();
            target.HttpContext.Request.SetHttpMethodResult("POST");

            //// Execute
            //RedirectToRouteResult result = target.LogOn(model,returnUrl) as RedirectToRouteResult;

            // Execute
            ViewResult result = target.LogOn(model, returnUrl) as ViewResult;
            membershipProviderMock
                .Expect(m => m.ValidateUser(username, password))
                .Returns(true);

            // Verify
            ViewDataDictionary viewData = result.ViewData;
            Assert.AreEqual("LoginPost", viewData["Title"]);
            Assert.AreEqual(1, viewData.Count);
        }

13. Lakukan Run Test lagi dan berikut adalah hasilnya pada Test Results

14. Anda juga dapat menjalankan 2 test tadi sekaligus, caranya adalah dengan pilih menu Tests–>Windows–>Test List Editor

15. Setelah itu akan keluar windows seperti di bawah ini:Anda hanya perlu memilih test mana yang akan anda jalankan, dalam tutorial ini saya menjalankan LogOnTest() dan LogOnTest2()

16. Setelah itu anda perlu mengklik tombol Run Checked Tests pada ujung kiri

17. Dan berikut adalah hasilnya pada Test Results

Demikian tutorial dari saya mengenai Unit Test menggunakan Visual Studio 2010.

Selamat mencoba 🙂

Dan untuk testing berikutnya yaitu GUI Testing akan saya paparkan pada artikel berikutnya. GUI Testing akan menggunakan sebuah fitur baru pada Visual Studio 2010 🙂


Advertisements

Posted in Microsoft, Tutorial, Verifikasi Validasi, Visual Studio | Tagged: , , , , | 1 Comment »

Unit Testing ASP.NET MVC 2 dengan Visual Studio 2010 – Part 1

Posted by Alexander Rahardjo on June 3, 2010

Pada tulisan kali ini saya akan menjelaskan terlebih dahulu mengenai Unit Testing 🙂

Apa itu Unit Testing?
Unit Testing adalah sebuah kode yang ditulis oleh developer, yang digunakan untuk menguji bagian kecil/area spesifik dari suatu fungsionalitas dari kode yang akan ditest.
Unit testing dilakukan untuk membuktikan apakah kode yang telah ditulis berfungsi sesuai dengan kehendak programmer.

Mengapa Unit Testing?
Secara implisit, unit testing akan membuat hidup seorang programmer menjadi lebih “mudah”.
Apalagi dengan menggunakan Visual Studio 2010 cukup dengan melakukan generate code untuk testing, Unit Testing pun dapat dilakukan.
Unit testing akan memperbaiki design code dan mengurangi waktu yang digunakan untuk debugging secara drastis.
Building house of cards, adalah perumpamaan yang tepat untuk menggambarkan proses coding tanpa testing. Karena bila pondasi/dasar dari bangunan tersebut labil, maka bagian-bagian yang dibangun diatasnya juga akan terpengaruh dan akhirnya runtuh.
Perubahan kecil pada suatu modul/unit akan merambat hingga ke level yang lebih tinggi, yang tentunya juga membutuhkan perbaikan. Oleh karena itu, perubahan pada level dasar harus ditest sebelum mempengaruhi level yg lebih tinggi.

Siapa yang melakukan Unit Testing?
Unit testing dilakukan oleh programmer yang menuliskan suatu modul/unit tertentu.
Test code tidak akan dikirimkan ke user, jadi hanya production code (kode yang digunakan dalam program utama) yang di-deliver ke user.

Kapan dilakukan Unit Testing?
Unit testing dilakukan setelah programmer selesai menuliskan suatu kode/fungsi/method yang ada dalam suatu class.
Dapat juga dilakukan setelah menambahkan sebuah fungsionalitas baru atau setelah melakukan refactoring.

Bagaimana cara melakukan Unit Testing?
Unit testing membutuhkan suatu tools yang spesifik untuk tiap-tiap bahasa pemrograman. Dan tools tersebut terpisah dengan bahasa pemrograman. Beberapa contoh tools yang digunakan pada unit testing :

  • CUnit : digunakan untuk bahasa C
  • JUnit : digunakan untuk bahasa Java
  • VBUnit : digunakan untuk bahasa Basic
  • NUnit : digunakan untuk bahasa C# (baca: c-sharp)
  • PHPUnit : digunakan untuk bahasa PHP

Dan pada seri tutorial ini saya menggunakan tools NUnit pada Visual Studio 2010 dan aplikasi yang saya testing adalah ASP.NET MVC 2 🙂

Posted in Microsoft, Tutorial, Verifikasi Validasi, Visual Studio | Tagged: , , , | 1 Comment »

Software Testing

Posted by Alexander Rahardjo on June 3, 2010


Testing adalah salah satu aktivitas yang harus dilakukan sebagai bagian dari tahap pembangunan perangkat lunak. Tujuannya adalah untuk mencari sebanyak-banyaknya kesalahan, error maupun defect. Testing dilakukan dengan mengacu pada test plan dan test cases. Idealnya, testing dilakukan oleh tester, bukan oleh programmer, sehingga lebih obyektif.

Pengujian Software adalah satu elemen dari sebuah topik broader yang sering diartikan sebagai Verifikasi dan Validasi (V&V)
Verifikasi : menunjuk ke kumpulan aktifitas yang memastikan bahwa software mengimplementasi sebuah fungsi spesifik.
Validasi : menunjuk ke sebuah kumpulan berbeda dari aktivitas yang memastikan bahwa software yang telah dibangun dapat di-trace terhadap kebutuhan customer.

Terdapat berbagai macam bentuk Software Testing dan pendekatan test itu sendiri terdiri dari 2 macam yaitu:


1. Black Box Testing
Test case ini bertujuan untuk menunjukkan fungsi PL tentang cara beroperasinya, apakah pemasukan data keluaran telah berjalan sebagaimana yang diharapkan dan apakah informasi yang disimpan secara eksternal selalu dijaga kemutakhirannya. Pada blog ini pernah dijelaskan sedikit mengenai Black Box Testing, dapat anda lihat pada link berikut 🙂

2. White Box Testing
Adalah meramalkan cara kerja perangkat lunak secara rinci, karenanya logikal path (jalur logika) perangkat lunak akan ditest dengan menyediakan test case yang akan mengerjakan kumpulan kondisi dan atau pengulangan secara spesifik. Secara sekilas dapat diambil kesimpulan white box testing merupakan petunjuk untuk mendapatkan program yang benar secara 100%.


Dan pada artikel saya berikutnya akan saya paparkan mengenai bentuk testing lainnya seperti NUnit Testing dan GUI Testing 🙂

Posted in Verifikasi Validasi | Tagged: , , | 3 Comments »

 
%d bloggers like this: