menemukan TypeMock

Selama Natal, saya mulai sebuah aplikasi kecil MVC dan karena saya ingin ini menjadi aplikasi berkualitas dalam produksi, dan hidup untuk waktu yang lama, saya memutuskan untuk menulis tes unit untuk semua . Saya tidak tahu apakah itu akan menjadi cakupan 100%, tapi idealnya aku ingin menjadi dekat.

Jadi, sebelum menulis satu baris kode sendiri, saya mulai menulis tes untuk kode yang dihasilkan, dan seperti yang diharapkan, itu tidak lama sebelum saya menjalankan dimulai pada metode statis dengan MOQ (kerangka mengejek saya digunakan) mungkin, tidak bisa dipermainkan.

Berikut adalah contoh dari sebuah action yang saya diuji:

 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 
[ HttpPost ] gaya public Action logon ( Model Model Logo String returnUrl ) { jika ( template gaya <". color: # 008000;" span class => IsValid ) { Ketika ( jangka ValidateUser
& amp; amp; quot;);}} & amp; amp; nbsp; // Jika kita sampai ke titik ini, sesuatu yang gagal, bentuk tampilan tampilan belakang belakang (model);}

Perhatikan bahwa Membership.ValidateUser () & amp; amp; amp;. FormsAuthentication.SetAuthCookie () metode yang statis dan tidak dapat diverifikasi

strategi saya, metode ini menciptakan wrapper ditemukan, jadi saya memiliki kelas berikut.

1 2 3 4 5 6 7 publik class MembershipWrapper IMembershipWrapper { publik bool ValidateUser ( String USERNAME String sandi ) { kembali Gaya ValidateUser ( username, password ) Gaya } }

dan

 1 2 3 4 5 6 7 
  Umum   Kelas Style  FormsAuthenticationWrapper   IFormsAuthenticationWrapper  {  Umum   Void  SetAuthCookie  (  gaya tali  USERNAME  Bool  rememberMe )   { FormsAuthentication    gaya SetAuthCookie   ( USERNAME rememberMe )    }  }  

Dan beberapa antarmuka

 1 2 3 4 
Umum Gaya Antarmuka IMembershipWrapper { Gaya Bool ValidateUser ( gaya tali USERNAME String sandi ) class gaya }

dan

 1 2 3 4 
  Umum   Gaya Antarmuka  IFormsAuthenticationWrapper  {  Void  SetAuthCookie  (  gaya tali  USERNAME  Bool  rememberMe )   class gaya  }  

Tidak persis ilmu roket.

Setelah saya membuat, saya harus memperlakukan properti Controller.Url. saya memiliki teknik saya untuk @ nvthoai situs.

 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 
  Umum   Gaya Antarmuka  IUrlHelperWrapper  {  String  Action  (  gaya tali  Action  String  kontroler )    & amp; nbsp;  String  Action  (  gaya tali  Action  String  kontroler  objek  routeValues ​​)    & amp; nbsp;  String  Action  (  gaya tali  Action  String  controller, routeValues ​​RouteValueDictionary )    & amp; nbsp;  Gaya Bool  IsLocalUrl  (  String  url )    }  & amp; nbsp;  Umum   Kelas Style  UrlHelperWrapper   UrlHelper, IUrlHelperWrapper  {  Internal  UrlHelperWrapper  ( Kirim Permintaan )     Gaya Basic   ( Tanyakan )   { }  & amp; nbsp;  Internal  UrlHelperWrapper    ( Aplikasi Permintaan, RouteCollection RouteCollection )   Gaya Basic   ( Application, RouteCollection )   { }  & amp; nbsp;  Gaya Umum  UrlHelperWrapper  ( UrlHelper helper )     Gaya Basic   ( bantuan    Tanyakan  helper    RouteCollection  )   { }  }  

Lalu, saya harus membuat variabel anggota kelas di controller

 1 2 3 
gaya pribadi keahlian IMembershipWrapper pribadi gaya baru URL IUrlHelperWrapper pribadi IFormsAuthenticationWrapper otentikasi

Dan desainer baru

<>
 1 2 3 4 5 6 7 8 9 10 11 13 Desember 
Umum gaya akun ( ) Ini ( class gaya MembershipWrapper ( ) gaya FormsAuthenticationWrapper ( ) nol ) { } & amp; nbsp; Umum gaya Akun ( IMembershipWrapper membershipObject, IFormsAuthenticationWrapper formsAuthenticationObject, IUrlHelperWrapper UrlHelper ) { Ini Keanggotaan = membershipObject ini URL = UrlHelper Ini Otentikasi Style = formsAuthenticationObject }

ganti kemudian menempatkan Initialize metode untuk mengatur saya UrlHelperWrapper


 1 2 3 4 5 6 
  Dilindungi   Ganti   Void  initialize  ( Kirim Permintaan )   {  Gaya Basic     Inisialisasi   ( Gaya Aplikasi ) Gaya     Ketika   ( URL  ==   nol  )  URL  =   Gaya Baru  UrlHelperWrapper  ( Tanyakan )    }  

Akhirnya, saya mengubah metode logon menggunakan kulit baru bukan metode statis.

 1 2 3 4 5 
  ...   Ketika   (    jangka ValidateUser   )     Pengembalian   (  true  )   gaya  Mock Authenticator  =   New  Mock  ( )    Mock UrlHelper  =   baru  Mock  ( )    UrlHelper    Configuration   ( h  = & amp; amp;  gt   h   . IsLocalUrl   (  gaya   gaya IsAny   ( )  )  )     kembali   (  benar  )     var  kontroler  =   baru  akun gaya  (    objek , otentikasi    objek , UrlHelper    Obyek gaya  ) gaya     var  template  =   New  logo Model  ( ) gaya  ;   Gaya Const   String Style  testURL  =   & amp; amp; quot; / Beberapa / menarik / 2 / membuat / uji / kembali / kanan / url / & amp; amp; quot;    & amp; amp; nbsp;  // Act  Action Hasil  =  Pengendali    logon   ( gaya Model testURL )    & amp; nbsp;  // Tegaskan  Tegaskan    IsNotNull   ( Hasil )  ;  Tegaskan     "Color:. # 008000; "> ( Hasil  typeof   ( RedirectResult ) gaya  )     gaya Var  RedirectResult  =  Hasil  Sebagai  RedirectResult   Tegaskan    AreEqual   ( gaya testURL RedirectResult    URL  )  ;  }  

Saya sekarang mempertimbangkan tes ini dan tumbuh lebih sehingga jumlah produsen pengendali dimulai, dan saya menambahkan tes lain termasuk bagian-bagian terkait "mengatur", aku merasa terdorong untuk menguji kode saya mulai membersihkan dan mengatur I. tiba-tiba ingin membuat variabel anggota kelas tes untuk masing-masing mengolok-olok yang diperlukan dan menambahkan lebih banyak overhead ... saya tidak puas dengan kode di atas, dan benar-benar, benar-benar ingin membersihkannya oleh produsen .

setelah menghabiskan akhir pekan omong kosong ini, daripada menambahkan untuk menulis fungsi yang saya cukup frustrasi dan menghabiskan giliran saya untuk bekerja pada Senin pagi, berpikir tentang hal itu. Sebagian besar waktu, aku bertanya-tanya panjang dan sulit untuk mengetahui apakah tes harus dianggap "sampah" dari pandangan Lean Startup. Dan jujur, aku benar-benar bersandar .... "Ya mereka adalah limbah"

Jadi, ketika saya bekerja, saya menghadapi tantangan bagaimana untuk menguji unit menugaskan web Formulir aplikasi yang benar-benar sebuah pertanyaan dari "Bagaimana kita bisa menertawakan itu?" Penelitian ini membuat saya Ivonna, yang tampak hebat, namun berdasarkan pemisah TypeMock.

Sekarang, saya sudah mendengarnya sebelum TypeMock, saya lakukan, mereka mengikuti di Twitter untuk setidaknya satu tahun, tetapi tidak pernah benar-benar melihat ke dalamnya. untuk membuat cerita panjang pendek, saya sedikit terkejut dengan harga, dan benar-benar tidak bisa mengerti mengapa orang akan membayar ketika ada begitu banyak alat bantu gratis mengejek.

saat itulah saya menemukan bahwa saya bisa mengejek metode statis ... yang dapat Anda bayangkan, setelah akhir pekan ini, saya tertarik untuk sedikitnya .... benar-benar dikonversi ' Status fanboy mungkin adalah

di sini, tes yang sama pada metode asli menggunakan TypeMock

 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 

			

			
	


				
	
			

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>