Bagikan melalui


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

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.

  1. Instal ekstensi XUnit Runner untuk Visual Studio 2013.

  2. Selesaikan tutorial Memulai, atau unduh aplikasi yang telah selesai dari Galeri Kode MSDN.

  3. Jika Anda menggunakan versi unduhan aplikasi Memulai, buka Konsol Pengelola Paket dan klik Pulihkan untuk menambahkan paket SignalR ke proyek.

    Pulihkan Paket

  4. 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.

    Buat Pustaka Pengujian

  5. 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 Referensi Proyek

  6. 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

      Instal Paket

  7. Buat file pengujian. Klik kanan proyek TestLibrary dan klik Tambahkan..., Kelas. Beri nama kelas baru Tests.cs.

  8. 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, tetapkan dynamic untuk parameter jenis.) Antarmuka IHubCallerConnectionContext adalah objek proksi tempat Anda memanggil metode pada klien. Fungsi broadcastMessage ini kemudian didefinisikan untuk klien tiruan sehingga dapat dipanggil oleh ChatHub kelas . Mesin uji kemudian memanggil Send metode ChatHub kelas , yang pada gilirannya memanggil fungsi yang ditiru broadcastMessage .

  9. Bangun solusi dengan menekan F6.

  10. Jalankan pengujian unit. Di Visual Studio, pilih Uji, Windows, Uji Penjelajah. Di jendela Test Explorer, klik kanan HubsAreMockableViaDynamic dan pilih Jalankan Pengujian yang Dipilih.

    Cuplikan layar memperlihatkan HubsAreMockableViaDynamic dipilih di jendela Test Explorer.

  11. Verifikasi bahwa pengujian lulus dengan memeriksa panel bawah di jendela Test Explorer. Jendela akan menunjukkan bahwa pengujian lulus.

    Cuplikan layar memperlihatkan pengujian unit menggunakan objek dinamis telah 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.

  1. Selesaikan langkah 1-7 dalam pengujian Unit dengan tutorial Dinamis di atas.

  2. 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 menggunakan Mock objek , dari jenis IHubCallerConnectionContext (di SignalR 2.1, tetapkan dynamic untuk parameter jenis.) Antarmuka IHubCallerConnectionContext adalah objek proksi tempat Anda memanggil metode pada klien.

    Pengujian kemudian membuat instans ChatHub, lalu membuat versi tiruan dari broadcastMessage metode , yang pada gilirannya dipanggil dengan memanggil Send metode di hub.

  3. Bangun solusi dengan menekan F6.

  4. Jalankan pengujian unit. Di Visual Studio, pilih Uji, Windows, Uji Penjelajah. Di jendela Test Explorer, klik kanan HubsAreMockableViaDynamic dan pilih Jalankan Pengujian yang Dipilih.

    Cuplikan layar memperlihatkan HubsAreMockableViaType dipilih di jendela Test Explorer.

  5. Verifikasi bahwa pengujian lulus dengan memeriksa panel bawah di jendela Test Explorer. Jendela akan menunjukkan bahwa pengujian lulus.

    Cuplikan layar yang menunjukkan pengujian unit berdasarkan jenis telah lulus.