Bagaimana cara unit menguji situs formulir web? Bagi saya sepertinya tergantung pada kondisi dan input pengguna, itu tidak layak.
Jika tidak layak, adakah alternatif otomatis yang valid?
Bagaimana cara unit menguji situs formulir web? Bagi saya sepertinya tergantung pada kondisi dan input pengguna, itu tidak layak.
Jika tidak layak, adakah alternatif otomatis yang valid?
Jawaban:
Ya kamu bisa. Anda hanya harus berhati-hati untuk memisahkan masalah Anda dengan baik. Singkatnya, Anda harus menghapus semua logika Anda dari kode di belakang dan memasukkannya ke kelas lain.
Ada dua cara umum untuk melakukan ini.
Cara sederhana adalah memikirkan kembali semua penangan acara Anda dalam hal "Informasi apa yang diberikan sistem kepada saya? Informasi apa yang saya butuhkan untuk mengisi pada halaman?" dan kemudian menyediakan kelas layanan yang melakukan konversi itu.
Dalam hal ini, lapisan layanan harus tahu sedikit tentang sifat lapisan presentasi Anda. Anda masih harus mengambil data yang dikembalikan dari layanan dan mengisi komponen WebForm yang benar dalam kode-belakang Anda dan ini masih belum teruji (setidaknya dengan tes unit, Anda masih dapat menggunakan tes integrasi). Tapi ini jarang terjadi ketika kode salah, jauh lebih mungkin gagal dalam logika.
Cara yang lebih rumit, tetapi lebih efektif, adalah dengan menggunakan pola Model View Presenter . Ketika kami mencobanya, kami menemukan bahwa Presenter dengan cepat menjadi sangat cocok dengan kerangka kerja dan, semakin kami mengembangkan MVP, semakin jelas bahwa MVP benar-benar ingin menjadi MVC tetapi tidak bisa.
Yang mengatakan, orang lain telah melakukan ini dengan sangat sukses - bahkan ada kerangka webformsmvp tersedia untuk menghapus pengangkatan berat - sehingga jarak tempuh Anda dapat bervariasi.
Jelas sekali, seluruh halaman formulir web bukanlah sebuah unit, dan dengan demikian tidak dapat diuji unit. Namun, ada beberapa hal yang dapat Anda lakukan untuk pengujian otomatis:
Saya minta maaf karena melewatkan bagian "unit" dari pertanyaan ...
SeleniumHQ adalah teman Anda untuk tes dari ujung depan. Ini bukan tes unit, lebih seperti pengujian kotak hitam. Anda masih perlu memikirkan kasus uji yang valid ...
Berbicara dari pengalaman: Hanya jika dilakukan dengan benar. Yang dimaksud dengan "benar" adalah kode minimal di belakang dan sesuatu seperti Model-View-Presenter yang disebutkan di atas untuk membuat Web Form "bodoh". Ini biasanya terbukti sangat sulit dengan aplikasi brownfield karena mereka tidak dirancang dengan pemikiran ini dan itu adalah upaya yang hampir Hercules untuk refactor / menulis ulang halaman untuk menggunakannya.
Saya menemukan tes web unit sangat berguna, bahkan jika itu hanya untuk memberikan gambaran umum tentang bug regresi atau untuk proyek baru.
Sejauh menyangkut keadaan, Anda membuat unit test seperti yang Anda lakukan dengan tes non-UI - mereka menghapus basis data pada awal pengujian dan membangun kembali basis data agar tidak mengandung apa pun kecuali keadaan awal. Setiap pengujian unit kemudian merangkum satu halaman, atau biasanya tugas yang berbeda pada satu halaman.
http://watin.org/ adalah alat uji web lain tetapi untuk C # /. NET. Anda menulis tes sebagai unit test:
[Test]
public void SearchForWatiNOnGoogle()
{
using (var browser = new IE("http://www.google.com"))
{
browser.TextField(Find.ByName("q")).TypeText("WatiN");
browser.Button(Find.ByName("btnG")).Click();
Assert.IsTrue(browser.ContainsText("WatiN"));
}
}
Saat ini berbasis IE tetapi memiliki beberapa dukungan eksperimental untuk Firefox dan Chrome. Anda dapat mengotomatisasi apa pun yang akan Anda lakukan dalam tes manual, termasuk interaksi Javascript.
Anda tidak dapat benar-benar menguji unit situs web, hanya karena permintaan web terjadi pada kabel (atau melalui tumpukan TCP). Dengan demikian, tes tidak sesuai dengan definisi "tes unit", mereka mungkin, tes end-to-end.
Untuk tes semacam itu, Anda dapat menggunakan suite seperti Selenium yang menjalankan browser web di belakang layar. Satu kata peringatan: biasanya pengujian semacam ini sangat sulit dan tidak dapat diprediksi, karena ada banyak bagian yang bergerak!
Lebih menarik lagi, saya agak khawatir mengapa Anda perlu menguji formulir web sama sekali. Apakah Anda tidak menempatkan terlalu banyak logika dalam kode di belakang, dan kebetulan memiliki logika bisnis anemia?
Selama 5 tahun terakhir Jasmine telah muncul sebagai alat utama untuk pengujian unit front-end. Ini sering dimasukkan ke dalam pengujian build otomatis dengan Node dan npm
Per https://en.wikipedia.org/wiki/Jasmine_(JavaScript_testing_framework) :
Jasmine adalah kerangka kerja pengujian sumber terbuka untuk JavaScript. [2] Ini bertujuan untuk berjalan pada platform apa pun yang mendukung JavaScript, untuk tidak mengganggu aplikasi atau IDE, dan untuk memiliki sintaks yang mudah dibaca. Ini sangat dipengaruhi oleh kerangka kerja pengujian unit lain, seperti ScrewUnit, JSSpec, JSpec, dan RSpec. [3]
Meskipun semua menyebutkan javascript juga dapat digunakan untuk pengujian unit formulir web biasa.
Saat mengembangkan situs ASP.NET kami dapat menjalankan tes unit pada:
Dimungkinkan untuk TDD semua ini, tergantung pada arsitektur Anda. Satu-satunya hal yang Anda tidak dapat uji unit adalah tata letak file markup.