Aplikasi SignalR Pengujian Unit
oleh Patrick Fletcher
Peringatan
Dokumentasi ini bukan untuk versi terbaru SignalR. Lihatlah ASP.NET Core SignalR.
Artikel ini menjelaskan penggunaan fitur Pengujian Unit SignalR 2.
Versi perangkat lunak yang digunakan dalam topik ini
- Visual Studio 2013
- .NET 4.5
- SignalR versi 2
Pertanyaan dan komentar
Silakan tinggalkan umpan balik tentang bagaimana Anda menyukai tutorial ini dan apa yang dapat kami tingkatkan di komentar di bagian bawah halaman. Jika Anda memiliki pertanyaan yang tidak terkait langsung dengan tutorial, Anda dapat mempostingnya ke forum ASP.NET SignalR atau StackOverflow.com.
Pengujian unit aplikasi SignalR
Anda dapat menggunakan fitur pengujian unit di SignalR 2 untuk membuat pengujian unit untuk aplikasi SignalR Anda. SignalR 2 menyertakan antarmuka IHubCallerConnectionContext , yang dapat digunakan untuk membuat objek tiruan untuk mensimulasikan metode hub Anda untuk pengujian.
Di bagian ini, Anda akan menambahkan pengujian unit untuk aplikasi yang dibuat dalam tutorial Memulai menggunakan XUnit.net dan Moq.
XUnit.net akan digunakan untuk mengontrol tes; Moq akan digunakan untuk membuat objek tiruan untuk pengujian. Kerangka kerja tiruan lainnya dapat digunakan jika diinginkan; NSubstitute juga merupakan pilihan yang baik. Tutorial ini menunjukkan cara mengatur objek tiruan dengan dua cara: Pertama, menggunakan dynamic
objek (diperkenalkan dalam .NET Framework 4), dan kedua, menggunakan antarmuka.
Konten
Tutorial ini berisi bagian berikut.
Pengujian unit dengan Dynamic
Di bagian ini, Anda akan menambahkan pengujian unit untuk aplikasi yang dibuat dalam tutorial Memulai menggunakan objek dinamis.
Instal ekstensi XUnit Runner untuk Visual Studio 2013.
Selesaikan tutorial Memulai, atau unduh aplikasi yang telah selesai dari Galeri Kode MSDN.
Jika Anda menggunakan versi unduhan aplikasi Memulai, buka Konsol Pengelola Paket dan klik Pulihkan untuk menambahkan paket SignalR ke proyek.
Tambahkan proyek ke solusi untuk pengujian unit. Klik kanan solusi Anda di Penjelajah Solusi dan pilih Tambahkan, Proyek Baru.... Di bawah simpul C #, pilih simpul Windows . Pilih Pustaka Kelas. Beri nama proyek baru TestLibrary dan klik OK.
Tambahkan referensi dalam proyek pustaka pengujian ke proyek SignalRChat. Klik kanan proyek TestLibrary dan pilih Tambahkan, Referensi... . Pilih simpul Proyek di bawah node Solusi , dan periksa SignalRChat. Klik OK.
Tambahkan paket SignalR, Moq, dan XUnit ke proyek TestLibrary . Di Konsol Manajer Paket, atur dropdown Proyek Default ke TestLibrary. Jalankan perintah berikut di jendela konsol:
Install-Package Microsoft.AspNet.SignalR
Install-Package Moq
Install-Package XUnit
Buat file pengujian. Klik kanan proyek TestLibrary dan klik Tambahkan..., Kelas. Beri nama kelas baru Tests.cs.
Ganti konten Tests.cs dengan kode berikut.
using System; using Xunit; using SignalRChat; using Microsoft.AspNet.SignalR.Hubs; using Moq; using System.Dynamic; namespace TestLibrary { public class Tests { [Fact] public void HubsAreMockableViaDynamic() { bool sendCalled = false; var hub = new ChatHub(); var mockClients = new Mock<IHubCallerConnectionContext<dynamic>>(); hub.Clients = mockClients.Object; dynamic all = new ExpandoObject(); all.broadcastMessage = new Action<string, string>((name, message) => { sendCalled = true; }); mockClients.Setup(m => m.All).Returns((ExpandoObject)all); hub.Send("TestUser", "TestMessage"); Assert.True(sendCalled); } } }
Dalam kode di atas, klien pengujian dibuat menggunakan
Mock
objek dari pustaka Moq , jenis IHubCallerConnectionContext (di SignalR 2.1, tetapkandynamic
untuk parameter jenis.) AntarmukaIHubCallerConnectionContext
adalah objek proksi tempat Anda memanggil metode pada klien. FungsibroadcastMessage
ini kemudian didefinisikan untuk klien tiruan sehingga dapat dipanggil olehChatHub
kelas . Mesin uji kemudian memanggilSend
metodeChatHub
kelas , yang pada gilirannya memanggil fungsi yang ditirubroadcastMessage
.Bangun solusi dengan menekan F6.
Jalankan pengujian unit. Di Visual Studio, pilih Uji, Windows, Uji Penjelajah. Di jendela Test Explorer, klik kanan HubsAreMockableViaDynamic dan pilih Jalankan Pengujian yang Dipilih.
Verifikasi bahwa pengujian lulus dengan memeriksa panel bawah di jendela Test Explorer. Jendela akan menunjukkan bahwa pengujian lulus.
Pengujian unit menurut jenis
Di bagian ini, Anda akan menambahkan pengujian untuk aplikasi yang dibuat dalam tutorial Memulai menggunakan antarmuka yang berisi metode yang akan diuji.
Selesaikan langkah 1-7 dalam pengujian Unit dengan tutorial Dinamis di atas.
Ganti konten Tests.cs dengan kode berikut.
using Xunit; using SignalRChat; using Microsoft.AspNet.SignalR.Hubs; using Moq; namespace TestLibrary { public class Tests { public interface IClientContract { void broadcastMessage(string name, string message); } [Fact] public void HubsAreMockableViaType() { var hub = new ChatHub(); var mockClients = new Mock<IHubCallerConnectionContext<dynamic>>(); var all = new Mock<IClientContract>(); hub.Clients = mockClients.Object; all.Setup(m => m.broadcastMessage(It.IsAny<string>(), It.IsAny<string>())).Verifiable(); mockClients.Setup(m => m.All).Returns(all.Object); hub.Send("TestUser", "TestMessage"); all.VerifyAll(); } } }
Dalam kode di atas, antarmuka dibuat mendefinisikan tanda tangan
broadcastMessage
metode yang mesin ujinya akan membuat klien tiruan. Klien tiruan kemudian dibuat menggunakanMock
objek , dari jenis IHubCallerConnectionContext (di SignalR 2.1, tetapkandynamic
untuk parameter jenis.) AntarmukaIHubCallerConnectionContext
adalah objek proksi tempat Anda memanggil metode pada klien.Pengujian kemudian membuat instans
ChatHub
, lalu membuat versi tiruan daribroadcastMessage
metode , yang pada gilirannya dipanggil dengan memanggilSend
metode di hub.Bangun solusi dengan menekan F6.
Jalankan pengujian unit. Di Visual Studio, pilih Uji, Windows, Uji Penjelajah. Di jendela Test Explorer, klik kanan HubsAreMockableViaDynamic dan pilih Jalankan Pengujian yang Dipilih.
Verifikasi bahwa pengujian lulus dengan memeriksa panel bawah di jendela Test Explorer. Jendela akan menunjukkan bahwa pengujian lulus.