Pengembangan Diri

Catatan komponen kontrol configureıf

Ketika menggunakan Windsor Castle saya sering subset dari komponen berdasarkan ada atau dengan cara yang berbeda seperti kualitas tertentu dari nilai konfigurasi untuk datang di sebuah skenario di mana Anda ingin diselamatkan mereka tumbuh. Untungnya untuk metode configureıf Windsor Castle menyediakan fungsionalitas untuk melakukannya, configureıf dapat menerapkan konfigurasi yang berbeda berdasarkan hasil evaluasi predikat predikat tertentu dilakukan.

Saya akan menggunakan skenario untuk menggambarkan hal ini sebagai berikut: Kita perlu memeriksa permintaan untuk halaman tertentu di website kami. Sebagai berikut

kontrol menggunakan preventif kita sebelum dan eksekusi yang kemudian dapat mengintervensi doa dan metode untuk melakukan menggunakan pencegahan, kode pencegahan

 public class auditıntercept adalah: ııntercept {public void Interceptor (ıınvocatio doa) {if (== invocation.method.n up & amp; quot; OnActionExecuting & amp; quot;) {auditrequest (doa); } Invocation.proceed (); } Void auditrequest Umum (doa ıınvocatio ini) {//}} Detail Audit persyaratan 

Permintaan untuk situs hanya untuk membuat alam dan bahwa halaman berfungsi untuk menunjukkan yang perlu dikontrol untuk menerapkan kontrol, sebagai berikut:

 requiresauditattribut public class ke: atribut {} [requiresaudit] public class AccountController: Pengendali {public Indeks ActionResult () {(Lihat rotasi); }} 

Jika Anda menambahkan kontak configureıf menggunakan metode controller untuk memeriksa apakah requiresauditattribut untuk adalah selama komponen dan auditıntercept persen berikutnya mendapatkan bagian yang menarik

 public class controllersınstal di ıwindsorınstal pada {insert public void (wadah ıwindsorcontain, toko ıconfigurationstor a) {container.regist adalah (alltypes.fromthisassembly () .basedo yang & amp; amp; lt; iControl dan amp; gt; () .Jika (Komponen .ısınsamenamespaceas & amp; amp l ; HomeControl pada & amp; Sons, rumus ()) .Jika (t = & amp; gt ;; Sons t.name.endswith (& amp; Sons berjudul kendali AS & amp; Sons, selanjutnya)) .Configur A (C & amp; Sons, C = .lifestyletransient ()) .configureıf (C & amp; Sons gt ;; c.ımplementation.ısdefined (typeof (requiresauditattribut) palsu), c = & amp; gt ;; Sons c.ınterceptors & amp; Sons lt; auditıntercept adalah & amp; Sons, rumus ())); }} 

Kode untuk artikel ini tersedia di Github.


Jasmine dan jstestdriv Unit Testing dengan JavaScript

Pada saat tes pilihan saya kerangka JavaScript melalui script atau executable jstestdriv menggunakan struktur sebagai bagian dari Jasmine dan Jasmine C. tes rangka, adalah untuk membuatnya otomatis. Pada artikel ini, saya memiliki fungsi sebagai berikut:

Aku ingin pindah setelah tes sederhana di bawah jstestdriv JavaScript dan akan memberikan akses cepat Jasmine;

  • mengembalikan hanya menambahkan dua angka dan hasil addnumb adalah,
  • adalah orang yang ditunjuk oleh layanan web dan orang yang menunjukkan fungsi renderperso forc’d displayperso ini,
  • JSON Dia memberi sepotong renderperso adalah orang-orang yang dikandungnya menunjukkan nama dan nama keluarga
 aplikasi I = {AddNumbers: fungsi (a, b) {var result = a + b; Pengembalian hasil; } Displayperso: function (PersonID) {$ GetJSON ('/ People /' + PersonID, null, myapp.renderperso dunia); } Renderperso di. Fungsi (data) {$ ('#firstn permainan') Teks (renovasi data.person.firstn); . $ ('#surn Up'), Text (renovasi data.person.surn); }}; 

Berikut ini tujuan mereka adalah jelas jadi saya pikir Jasmine JavaScript menyediakan struktur tes uji kode di atas.

Jasmine di dunia ini Anda adalah yang paling kuat dan berguna NET mereka menawarkan fungsionalitas yang sama dengan MOQ dan mengejek fungsi Rhino, Anda / rintisan yang memungkinkan Anda untuk mengejek Spies. Kode mata-mata kancing bawah metode pengujian yang tidak menggunakan layanan yang tersedia getJSON membuat jQuery panggilan.

Jika Anda ingin memastikan bahwa itu benar Anda lainnya fitur yang berguna rekaman kode untuk berinteraksi dengan elemen HTML yang, misalnya, sangat berguna, mereka diizinkan untuk menginstal tes HTML dengan menempatkan teks di daerah dengan identitas yang unik.

 'nomor sambil menambahkan', function () mendefinisikan ('My App Tes', function () {menjelaskan ({o ('Anda perlu menambahkan dua nomor' , function () {var = hasil myapp.addnumbers (5, 10); menunggu (hasil) .toequal (15);});}); seseorang melihat "(menjelaskan '{) (fungsi dorong (" Kami ") ; ada PersonID = 354; myapp.displayperso ini (PersonID) dipersilahkan ($ GetJSON) .tohavebeencalledwith (function 'getJSON' () {spyo dari ($, 'Anda harus mendapatkan orang / orang /' + PersonID, null, jasmine.any (Fungsi ));}); o ("hasil harus" function () {var JSON = 'beberapa informasi'; spyo ini (Application'm renderperso ini '); spyo dari ($,' getJSON ') .andcallfak ke (function (url, data, callback ) {return (JSON);}); ada PersonID = 354; myapp.displayperso ini (PersonID); menunggu (myapp.renderperso ini) .tohavebeencalledwith (JSON);});}); resep (function ('orang yang melakukan') { beforeeach (function () {setfixtures (& amp; quot; & amp; lt; div & amp; gt; & amp; amp; lt; span id = "nama" / & amp; amp; gt; & Amp; Gamble; lt; span id = "nama" / & amp; amp; gt; & Amp; Gamble; lt; / Div & amp; amp; gt; & Amp; Gamble; quote); Data var = {& amp; amp; quot; orang dan amp; quot; {& amp; Amp; quot; Nama & amp; Amp; quot ;: & amp; Amp; quot; Fred & amp; amp; quot ;, & amp; amp; quot; Nama asli & amp; Amp; quot ;: & amp; Amp; quot; blog dan amp; quot;}}; myapp.renderperso (data)}); o ('harus menampilkan nilai nama' function () {menunggu ($ ('#firstn up'), teks ()) toequal ("Fred");} ..); o ("harus menunjukkan nama ', function () {menunggu ($ (' #surn up '), teks ()) toequal (.' blog ');.});});}); 

Jasmine Pengujian dilakukan dengan pemindai, beberapa perpustakaan harus membuat halaman yang referensi melati, kode dan tes dan semua jenis perpustakaan tergantung pada aplikasi Semua tes direferensikan dilakukan ketika Anda memuat halaman ini, hasil yang ditampilkan sebagai berikut:

Ini cara menjalankan tes adalah untuk memerintah pada komputer pembangunan daerah Anda, tetapi melalui komponen naskah atau C Hal ini tidak berguna jika Anda ingin menjalankan tes Anda. Ini adalah di mana saya menunjukkan saya yang mungkin jstestdriv dapat menjalankan tes otomatis berikut bagaimana membantu perlu men-download Jasmine untuk jstestdriv Adapter jstestdriv adalah men-download serta PowerShell

Menggunakan bantuan jstestdriv adalah Jasmine. Apa yang perlu Pertama kita dapat menjalankan Apa yang harus menunjukkan jstestdriv titik untuk men-download file. Contoh ini

ditampilkan di bawah ini untuk ini, membuat jstestdriver.conf berkas

 membuat server: http: // localhost: 9876 beban - /jasmine.js lib - lib / melati-jquery-1.3.1.js - code.js src / test - - lib / jasmineadapter.js - /lib/jquery-1.7.1.min.js Tes / codetests. js 

jstestdriv adalah untuk memulai dan untuk melaksanakan tes harus membuat skrip PowerShell Berikutnya; Contoh script ini ditunjukkan di bawah ini. Ketika Anda mencoba untuk menjalankan tempat ini, Anda mungkin perlu memperbarui Java Runtime Environment tidak dipasang di tempat yang sama dengan saya, seperti jalan.

Dengan asumsi bahwa jalankan perintah berikut dari hanya jenis file PowerShell jelas dan runjstests.ps1. . runjstests.ps1 dan mengikuti produksi

 $ RootDir = Selesaikan Road. $ Jawa = & amp; amp; quot; $ Anwar: jre6 ribu java.exe Java & amp; ProgramFiles amp; quot; $ Firefox = & amp; amp; quot; $ Anwar Mozilla Firefox firefox.exe & amp; ProgramFiles amp; quot; Kata-kata $ = & amp; amp; quot; $ Anwar: Internet Explorer iexplore.exe & amp; ProgramFiles amp; quot; $ Chrome = & amp; amp; quot; $ Anwar: Google Chrome App LocalAppData chrome.exe & amp; amp; quot; $ Jsunittestreportpath = $ RootDir & amp; Bergabunglah amp-Way; quot; Laporan & amp; amp; quot; $ Jstestdriv adalah = $ RootDir & amp; Bergabunglah amp-jalan; quot; jstestdriv on-1.3.3d.j adalah & amp; Amp; quot; runtests function () {{exec & amp; amp; amp; Java jar adalah --port 9876 $ $ jstestdriv jstestdriver.conf --configdir --brows adalah & amp; Amp; quot; $ Firefox & amp; amp; quot; Semua --tests $ --testoutput runtests jsunittestreportpath}} 

Tes melakukan jstestdriv atas naskah, kita dapat mengubah selama kita di browser apapun memberikan browser bimbingan kebakaran hutan menggunakan contoh fox tes berjalan kita semua tes di rubah-api, Chrome dan Browser jstestdriv selain browser Internet Explorer dapat dijalankan hanya ingin menjalankan mengubah parameter, Anda dapat menggunakan beberapa browser

 --brows adalah & amp; amp; quot; $ Firefox, Chrome $, yaitu $ & amp; amp; quot; 

Jika Anda ingin menjalankan JavaScript unit test sebagai bagian dari konstruksi CI jstestdriv memungkinkan, parameter testoutput jstestdriv membuat laporan sesuai JUnit ke folder tertentu dan menyimpan acara.

Kode untuk artikel ini tersedia di Github.


JSLint Otomasi dengan PowerShell

JSLint seperangkat aturan terhadap program JavaScript memeriksa kode Anda, misalnya, titik tidak hilang dan mengawasi kepatuhan terhadap peraturan ruang ini. Menggunakan JavaScript ini, Anda dapat menyimpan pelacakan sebagai mengembangkan jam tangan yang masalah yang dihasilkan dari kesalahan sintaks pasti layak tebal waktu.

Bentuk JSLint situs Anda mendapatkan sedikit membosankan paste kode JavaScript belum, dan idealnya secara terkendali JSLint berjalan secara otomatis sebagai bagian dari struktur akan menyenangkan untuk membangun yang berkelanjutan dan sebab apapun kesalahan gagal. Saya telah membuat sebuah script PowerShell yang menggunakan jslint4jav Untuk melakukan hal ini, jslint4jav untuk

Script PowerShell (runjslint.ps1) bungkus sekitar JSLint JSLint diperbolehkan untuk dijalankan dari baris perintah ditampilkan di bawah. Membuat script berikut

  • untuk menunjukkan bahwa cek dan diperlukan untuk menghasilkan hal yang sama tentang laporan
  • memeriksa menerima daftar jslint4jav file Mulai JavaScript lulus daftar file JUnit
  • bentuk file tertentu

Output mengarahkan

 $ RootDir = Memecahkan-Street. $ Jawa = & amp; amp; quot; $ Anwar: jre6 ribu java.exe Java & amp; ProgramFiles amp; quot; $ Jslintreportpath = $ RootDir & amp; Bergabunglah amp-Way; quot; laporan jslintreport.txt dan amp; quot; $ Jslint4jav untuk = $ RootDir & amp; Bergabunglah amp-Way; quot; jslint4jav ke-2.0.1.j adalah & amp; Amp; quot; Fungsi runjslint () {$ filestocheck = (Get-childıte I & amp; quot; src & amp; quot; recurse Sertakan Js *) & amp; amp; amp; $ J $ jslint4jav ke $ filestocheck --report Java & amp; amp; quot; JUnit & amp; Amp; quot; | Output file $ jslintreportpath runjslint} 

Sekarang kita, saya telah membuat dua file yang sangat sederhana (untuk melihat code.js dan moreco memiliki sarana yang diperlukan untuk melaksanakan JSLint harus membuat beberapa JavaScript Js.) Baik

Javascript ditampilkan di bawah yang berisi

​​Kedua termasuk masalah JSLint akan mengeluh.; Hilang pernyataan pertama “menggunakan ketat” (dalam artikel John Resig ada penjelasan StrictMode baik). Kedua, sementara hilang titik koma.

 var Hal = function (nama) {this.a up = nama; }; <"; Judul sikat: notranslate JScript," pre class => Ada anotherthing = function (nama) {& amp; amp; 
quot; penggunaan dan amp yang ketat; quot ;; this.a = Nama};

Setelah menjalankan script PowerShell sebagai berikut:

jslint4jav untuk menghasilkan laporan JUnit-gaya

 & amp; amp; lt; TestSuites & amp; Amp; gt; & Amp; Gamble; Lt; error testsuite = "1" ketika = "0012" melewatkan = '0' Error = '1' test = "1" name = 'D: Bisnis Blog JSLint src code.js' & amp; amp; gt; & Amp; amp; lt; waktu string = '0,012' classname = 'com.googlecode.jslint4jav untuk' name = 'D: Bisnis Blog JSLint src code.js' & amp; amp; gt; & Amp; amp; lt; Pesan kesalahan = '1 masalah ditemukan' type = '. Lang.assertionerr minggu & amp; amp; gt; D: log Kerja JSLint src code.js: 2: 5:. 'Gunakan' pernyataan Rugi ketat dan amp; lt; / Kegagalan dan amp; gt; & Amp; amp; lt; / String dan amp; gt; & Amp; amp; lt; / TestSuite & amp; amp; gt; & Amp; amp; lt; TestSuite kegagalan = "1" ketika = "0008" = melewatkan '0' error = test '1' = "1" name = 'D: Bisnis Blog JSLint src morecode.js' & amp; amp; gt; & Amp; Gamble; lt; waktu string = '0008' classname = 'com.googlecode.jslint4jav untuk' name = 'D: Bisnis Blog JSLint src morecode.js' & amp; amp; gt; & Amp; Gamble; lt; pesan kesalahan = type = "java" 1 masalah Ditemukan 'lang.assertionerr ini & amp; gt; D:. Bisnis Blog JSLint src morecode.js: 3: 21: "Diharapkan:." Dan di tempat pertama'} '& amp; amp; lt; / Kegagalan & amp; gt; & amp; amp; lt; / Test-Case & amp; gt; & amp; amp; lt; / testsuite & amp; amp; gt; & amp; amp; lt; / TestSuites & amp; amp; gt; 

Produk ini mudah dibaca dan apa yang harus membuat file unit test efektif untuk jslint4jav dan Anda dapat melihat kedua tes gagal karena masalah yang dijelaskan di atas Kami memperbaiki tayangan ulang JavaScript dan perintah, laporan yang dihasilkan yang berisi dua tes lagi. tapi kali ini dua

sekarang

 & amp; amp; lt; TestSuites & amp; amp; gt; & amp; amp; lt; = kegagalan '0' ketika testsuite yang = '0013' = melewatkan '0' Error = tes '0' = "1" name = 'D: Bisnis Blog JSLint src code.js' & amp; amp; gt; & amp; amp; lt; waktu String = '0013' classname = 'com.googlecode.jslint4jav untuk' name = 'D: Bisnis Blog JSLint src code.js' & amp; amp; gt; & Amp; Gamble; lt; / Test-kasus & amp; amp; gt; & Amp; Gamble; lt; / TestSuite & amp; Amp; gt; & Amp; Gamble; Lt; Kegagalan testsuite = '0' ketika = "0009" = melewatkan kesalahan = '0' 0 'test = "1" name =' D: Bisnis Blog JSLint src morecode.js '& amp; amp; gt; & Amp; amp; lt; waktu string = '0,009' classname = 'com.googlecode.jslint4jav untuk' name = 'D: Bisnis Blog JSLint src morecode.js' & amp; amp; gt; & Amp; amp; lt; / String dan amp; gt; & Amp; amp; lt; / TestSuite dan amp; gt; & Amp; amp; lt; / TestSuites dan amp; gt; hanya (karena Anda dapat melewatkan parameter 

Saya tidak ingin menerapkan jslints semua aturan akan kali, jslint4jav lebih mudah

Kami rincian semua parameter "menggunakan ketat" Jika Anda ingin menerapkan penggunaan, misalnya, oleh karena itu, mengembalikan pull off) tersedia di sini, Anda Anda dapat memiliki parameter "ceroboh" Di sini

 fungsi runjslint () {$ filestocheck = & amp; amp; amp; $ J $ jslint4jav ke $ filestocheck --report Java & amp; amp; quot; JUnit & amp; amp; quot; --sloppy | Out-File $ jslintreportpath runjslint} 

Artikel ini tersedia pada Github untuk kode

Tindakan Unit Test

Saya bertanya bagaimana untuk menguji unit kode yang menggunakan pendekatan untuk bertindak minggu ini oleh seorang rekan, artikel ini menunjukkan bagaimana pendekatan ini.

Ada orderprocess dan kelas orderbatch ditunjukkan di bawah ini. orderprocess bertanggung jawab untuk memproses pesanan dan batch processing orderprocess waktu membutuhkan masing-masing pihak untuk memberikan daftar perintah yang akan dijalankan ketika pengolahan orderbatch dan susun tindakan, katanya untuk memproses pesanan dalam batch. bets orderbatch dan mengeksekusi perintah yang diberikan untuk setiap tindakan pihak.

 public class ıorderbatch adalah orderprocess adalah {_orderbatch readonly swasta; ReadOnly swasta ıordersend adalah _ordersend adalah; ReadOnly swasta ıorderrecord adalah _orderrecord adalah; Pada orderprocess adalah (ıorderbatch adalah orderbatch adalah, ıordersend yang OrderSend adalah, ıorderrecord adalah orderrecord ini) {_orderbatch R = orderbatch The; R = adalah OrderSend _ordersend; R = adalah _orderrecord orderrecord; } Proses kekosongan Umum (Daftar-amp; lt; Order & amp; gt; perintah, processınbatches bool) {if (processınbatches) {Aksi & amp; lt; Daftar dan amp; lt; Order & amp; amp; gt; & Amp; Gamble; gt; batchprocess R = batchedorders = & amp; Amp; gt; {_ordersender.send (Batchedorders); batchedorders.foreach (x = & amp; gt ;; Sons _orderrecorder.ordersent (x)); }; _orderbatcher.processbatches (pesanan batchprocess); } Lain {foreach (karena ada perintah) {_ordersender.send (order); _orderrecorder.ordersent (order); }}}} 
 public class orderbatch adalah: ıorderbatch adalah _batchsiz untuk membaca {private int = 5; (; Lt; Order & amp; gt; pesanan, Game & amp; lt; Daftar & amp; lt; Order & amp; gt; & amp; gt; batchprocess Daftar & amp; Sons) {var publik = Daftar Baru & amp; public void processbatches amp; lt; Daftar dan amp; lt; Order & amp; amp; gt; & Amp; Gamble; gt; (); sementara (benar) {var bets = orders.skip (batches.count * _batchsiz) Lepaskan (_batchsiz a) .ToList (); {Pecah jika (batch.any ()!); } Batches.add (batch); } Batches.foreach (batchprocess yang); }} 

Tes orderprocess tes berikut (saya kuantitatif menggunakan sarkasme)

Anda dapat mulai membuat
 [Setup] public void setup () {baru Prosesi _orderbatch = & amp; amp; lt; ıorderbatch adalah & amp; Amp; gt; (); Baru _ordersend resimen = & amp; amp; lt; ıordersend adalah & amp; Amp; gt; (); Baru _orderrecord resimen = & amp; amp; lt; ıorderrecord adalah & amp; Amp; gt; (); _orderprocess = New orderprocess adalah (_orderbatcher.object, _ordersender.object, _orderrecorder.object); } [Test] public void when_processing_orders_in_batches () {var order = new Daftar & amp; amp; lt; Urutan & amp; amp; gt; (); _orderprocessor.process (perintah, true); _orderbatcher.verify (x = & amp; amp -benzylamine; x.processbatches (perintah, ıt.ısany & amp; amp lt; Action & lt; daftar & amp; amp lt; Order & amp; amp; gt; & amp; amp; gt; & amp rumus Sons (I)), & amp; quot;); pihak dan proses kutipan yang dipesan; } 

Sebagai tes di atas tidak memeriksa apakah gerakan yang benar berlalu orderbatch tidak cukup baik. Untungnya, itu membuatnya mudah untuk mengambil tindakan Per orderbatch telah diakui dan kami memastikan bahwa tindakan menggunakan waktu akses yang mudah dan t Untuk memverifikasi bahwa pencarian yang benar dan akurat dilakukan dengan menggunakan MOQ.

Kode berikut menunjukkan bagaimana membuatnya, potongan kembali fungsi yang memungkinkan untuk mengakses parameter yang dikirimkan ke metode, kita memiliki variabel lokal

digunakan untuk melindungi nilai parameter tindakan Aksi & amp; lt; Daftar dan amp; lt; Order & amp; amp; gt; & Amp; Gamble; gt; batchprocess = null; _orderbatcher.setup (x = & amp; amp -benzylamine; x.processbatches (perintah, ıt.ısany & amp; amp lt; Action & lt; daftar & amp; amp lt; Order & amp; amp; gt; & amp; amp; gt; & amp Sons formula (I))) Kembali untuk mencari & amp; Amp; Ini diperoleh. Daftar dan amp; lt; Order & amp; amp; gt ;, Action dan amp; lt; Daftar dan amp; lt; Order & amp; amp; gt; & Amp; Gamble; gt; & Amp; Gamble; gt; ((X, y) = & amp; gt ;; Sons batchprocess = Y);

Sekarang, seperti yang kita melaksanakan ini dan demonstrasi, tindakan yang diperlukan untuk memverifikasi bahwa akses yang benar tindakan

 Batchprocess The (perintah); _ordersender.verify (x = & amp; amp; gt; x.send (perintah) & amp; amp; quot; quot ;; perintah dan mengirim amp); _orderrecorder.verify (x = & amp; amp -benzylamine; x.ordersent (Order1) Co, 1 & amp; Gamble harus mencatat urutan; kutipan Paten AS); _orderrecorder.verify (x = & amp; amp; gt; x.ordersent (order2), dan amp; amp catatan 2,, kutipan dan ketertiban seharusnya quot;); 

Tes penuh

ditampilkan di bawah ini
 [Setup] public void setup () {resimen baru _orderbatch R = & amp; amp; lt; ıorderbatch adalah & amp; Amp; gt; (); Baru _ordersend resimen = & amp; amp; lt; ıordersend adalah & amp; Amp; gt; (); Baru _orderrecord resimen = & amp; amp; lt; ıorderrecord adalah & amp; Amp; gt; (); _orderprocess = New orderprocess adalah (_orderbatcher.object, _ordersender.object, _orderrecorder.object); } [Test] public void when_processing_orders_in_batches () {var Order1 = Orde baru (); Ada order2 = Orde baru (); Ada perintah = baru Daftar & amp; amp; lt; Urutan & amp; amp; gt; {Order1, order2}; Aksi & amp; lt; Daftar dan amp; lt; Order & amp; amp; gt; & Amp; Gamble; gt; batchprocess = null; _orderbatcher.setup (x = & amp; amp -benzylamine; x.processbatches (perintah, ıt.ısany & amp; amp lt; Action & lt; daftar & amp; amp lt; Order & amp; amp; gt; & amp; amp; gt; & amp Sons formula (I))) Kembali untuk mencari & amp; Amp; Ini diperoleh. Daftar dan amp; lt; Order & amp; amp; gt ;, Action dan amp; lt; Daftar dan amp; lt; Order & amp; amp; gt; & Amp; Gamble; gt; & Amp; Gamble; gt; ((X, y) = & amp; gt ;; Sons batchprocess = Y); _orderprocessor.process (perintah, true); _orderbatcher.verify (x = & amp; amp; gt; x.processbatches (perintah, batchprocess ini), dan amp; quot; kelompok dan proses kutipan yang akan dipesan); batchprocess The (perintah); _ordersender.verify (x = & amp; amp; gt; x.send (perintah) & amp; amp; quot; quot ;; perintah dan mengirim amp); _orderrecorder.verify (x = & amp; amp -benzylamine; x.ordersent (Order1) Co, 1 & amp; Gamble harus mencatat urutan; kutipan Paten AS); _orderrecorder.verify (x = & amp; amp; gt; x.ordersent (order2), dan amp; amp catatan 2,, kutipan dan ketertiban seharusnya quot;); } 

Kami telah berhasil tindakan sekarang bergerak menuju metode orderbatch kami yang Anda butuhkan untuk pengujian akan perlu untuk memverifikasi bahwa mengeksekusi tanda tangan berikut, orderprocess akurat orderbatch telah diperiksa

 processbatches ternilai publik (Daftar-amp; lt; Order & amp; gt; perintah, Game & amp; lt; Daftar & amp; lt; Order & amp; gt; & amp; gt; batchprocess adalah ) 

Metode ini tindakan pengadaan yang menyelamatkan tes adalah pendekatan yang sederhana dan disebut dan kemudian verifikasi waktu dalam hal ini saya bertindak, ketika semua telah memberikan begitu tepat disebut waktu berikutnya, pesan, menyimpannya disebut dengan daftar dan kemudian menguji untuk memverifikasi bahwa Kuperintahkan

 [Test] public void when_processing_batches () {var = rangka enumerable.rang (1, 20) .Select (x = & amp; amp; gt; Orde Baru ID = {x}) Tolis (). Ada bets = new Daftar & amp; amp; lt; Daftar dan amp; lt; Order & amp; amp; gt; & Amp; Gamble; gt; (); Aksi & amp; lt; Daftar dan amp; lt; Order & amp; amp; gt; & Amp; Gamble; gt; Action = batches.add; Ada orderbatch orderbatch = baru (); orderbatcher.processbatches (perintah, tindakan); assert.that (batches.count, ıs.equalto (4), Co berjudul US Patent No 4 seri dan kutipan pesanan harus diproses); Gt; x.first () == Id 1 & amp; amp; amp;. & Amp; Amp; amp; (Batches.singleordefault (x = & amp; amp assert.that x.last () == id 5), ıs.not.null, & amp; quot;.); quot; Ini adalah umum & amp; harus diproses amp; Gt; x.first () == id 6 & amp; amp; amp;. & Amp; Amp; amp; (Batches.singleordefault (x = & amp; amp assert.that x.last () == id 10), ıs.not.null, & amp; quot;. Ini harus menjadi pesta 2 dan diproses, kutipan); Gt; x.first () == id 11 & amp; amp; amp;. & Amp; Amp; amp; (Batches.singleordefault (x = & amp; amp assert.that x.last () == id 15), ıs.not.null, & amp; quot;. Ini harus pesta 3 dan diproses, kutipan); Gt; x.first () == id 16 & amp; amp; amp;. & Amp; Amp; amp; (Batches.singleordefault (x = & amp; amp assert.that x.last () == id 20), ıs.not.null, & amp; quot;. Ini harus menjadi pesta 4 & amp; amp diproses, kutipan); } 

Kode untuk artikel ini tersedia di Github.