Studi Kasus: Mengubah string 1 menjadi object Satu (3)

Mengubah string 1 menjadi object Satu.

Jika kita kompile kita akan memperoleh 2 kesalahan. Namespase “Satu” tidak ditemukan dan
variabel “exConverter” juga tidak ditemukan dimana dia dideklarasikan. Ok. Kita deklarasikan terlebih
dahulu exConverter.

[Test] 
public void Konversi1KeObjectSatu() 
{ 
          string input="1"; 
          IExpressionConverter exConverter=new ExpressionConverter(); 
          Assert.IsInstanceOfType(typeof(Satu),exConverter.Convert(input)); 
          Assert.AreEqual("1",exConverter.Convert(input).Expression); 
}

Saya deklarasikan variabel exConverter sebagai interface IExpressionConverter dengan konkrit
class ExpressionConverter. Jadi yang nampak oleh saya nantinya hanyalah interface atau API dari
ExpressionConverter.

Sekarang kita memiliki 2 class dan 1 interface yang belum kita definisikan. Kembali ke Solution
Exploreer anda, klik project applikasi tambahkan 3 file, satu untuk interface dan dua untuk class.

namespace Fatur.Calculator 
{     
        public interface IExpressionConverter 
        { 
        } 
}

Buat class ExpressionConverter yang mengimlementasikan IexpressionConverter,

namespace Fatur.Calculator 
{ 
         
         
        public class ExpressionConverter:IExpressionConverter 
        { 
                 
                public ExpressionConverter() 
                { 
                } 
        } 
}

Terakhir buat class Satu.

namespace Fatur.Calculator 
{ 
         
         
        public class Satu 
        { 
                 
                public Satu() 
                { 
                } 
        } 
}

Referensikan project App ke dalam Project test. Jangan lupa juga untuk mengetikkan “using
namespace.Calculator” dibagian atas class test (namespase.CalculatorFixture) anda.
Pesan kesalahan selanjutnya adalah method Convert tidak ditemukan. Tambahkan method Convert ke
dalam interface

public interface IExpressionConverter 
{ 
        Satu Convert(string expresi); 
}

Dan implementasinya di dalam class ExpressionConverter,

public class ExpressionConverter:IExpressionConverter 
        { 
         
 
               public Satu Convert (string expresi) 
               { 
                       return null; 
               } 
        }

Perhatikan, sementara ini saya hanya memberi kembalian null.

Dan class Satu memerlukan property Expression,

public class Satu 
        { 
               public string Expression{ 
                       get { 
                               return "1"; 
                       } 
               } 
        }

Ok. Selesai. Program bisa kita kompile begitu juga dengan testnya.
Tahap selanjutnya adalah menjalankan test. Buka NUnit GUI lalu browse ke lokasi dll dimana project
test dikompilasi. Klik Run. Atau double click didalam tri­view.
NUnit berubah menjadi merah. Pertanda ada sedikit kesalahan. Pesannya adalah:”Object null
reference”. Kita tahu dimana masalahnya. Kita tadi telah mereturn null untuk method Convert.

public Satu Convert (string expresi) 
               { 
                       return new Satu(); 
               }

Dari yang sebelumnya saya return null, kini saya return Satu.
Kembali test saya kompile dan NUnit berubah menjadi hijau. Kita telah melakukan “make it work”.
Sekarang kita akan melakukan tahap “make it right”. Apa yang harus kita buat benar? Class Satu bocor
sampai didalam test, menurut saya ini sedikit tidak benar. Yang boleh bocor hanyalah API. Jadi mau
tidak mau harus diwakili oleh interface.

[Test] 
               public void Konversi1KeObjectSatu() 
               { 
                       string input="1"; 
                       IExpressionConverter exConverter=new ExpressionConverter(); 
                       Assert.IsInstanceOfType(typeof(IExpression),exConverter.Convert(input)); 
                       Assert.AreEqual("1",exConverter.Convert(input).Expression); 
               }

Jadi yang tadinya typeof(Satu) saya ubah menjadi typeof(IExpression). Karena output dari method
Convert bukan IExpression, NUnit memberi pesan pada saat mengeksekusi “IsInstanceOfType” berupa:

               Expected: IExpression
               But was  : Satu

Cara yang paling mudah adalah dengan membuat class Satu sebagai implementor dari IExpression,

public class Satu:IExpression

Nah, dengan cara ini NUnit yang tadinya merah menjadi hijau kembali. Sedikit lebih baik.Setuju?

Iklan

There are no comments on this post.

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: