Модульное тестирование приложений SignalR
Предупреждение
Эта документация не для последней версии SignalR. Взгляните на ASP.NET Core SignalR.
В этой статье описывается использование функций модульного тестирования SignalR 2.
Версии программного обеспечения, используемые в этом разделе
- Visual Studio 2013
- .NET 4.5
- SignalR версии 2
Вопросы и комментарии
Оставьте отзыв о том, как вам понравилось это руководство и что мы могли бы улучшить в комментариях в нижней части страницы. Если у вас есть вопросы, которые не связаны напрямую с руководством, вы можете опубликовать их на форуме ASP.NET SignalR или StackOverflow.com.
Модульное тестирование приложений SignalR
Функции модульного теста в SignalR 2 можно использовать для создания модульных тестов для приложения SignalR. SignalR 2 включает интерфейс IHubCallerConnectionContext , который можно использовать для создания макета объекта для имитации методов концентратора для тестирования.
В этом разделе вы добавите модульные тесты для приложения, созданного в руководстве по начало работы с помощью XUnit.net и Moq.
XUnit.net будет использоваться для управления тестом; Moq будет использоваться для создания макета объекта для тестирования. При необходимости можно использовать другие макетные платформы; NSubstitute также является хорошим выбором. В этом руководстве показано, как настроить макет объекта двумя способами: во-первых, с помощью dynamic
объекта (представленного в платформа .NET Framework 4), а во-вторых, с помощью интерфейса.
Содержимое
Это руководство содержит следующие разделы.
Модульное тестирование с помощью Dynamic
В этом разделе вы добавите модульный тест для приложения, созданного в начало работы учебнике с помощью динамического объекта.
Установите расширение XUnit Runner для Visual Studio 2013.
Выполните начало работы учебник или скачайте готовое приложение из коллекции кода MSDN.
Если вы используете скачиваемую версию приложения начало работы, откройте консоль диспетчера пакетов и нажмите кнопку Восстановить, чтобы добавить пакет SignalR в проект.
Добавьте проект в решение для модульного теста. Щелкните правой кнопкой мыши решение в Обозреватель решений и выберите Добавить, Создать проект.... В узле C# выберите узел Windows. Выберите Библиотека классов. Назовите новый проект TestLibrary и нажмите кнопку ОК.
Добавьте ссылку в проект библиотеки тестов в проект SignalRChat. Щелкните правой кнопкой мыши проект TestLibrary и выберите Добавить, Ссылка.... Выберите узел Проекты в узле Решение и проверка SignalRChat. Нажмите кнопку ОК.
Добавьте пакеты SignalR, Moq и XUnit в проект TestLibrary . В консоли диспетчера пакетов задайте для раскрывающегося списка Проект по умолчаниюзначение TestLibrary. В окне консоли выполните следующие команды:
Install-Package Microsoft.AspNet.SignalR
Install-Package Moq
Install-Package XUnit
Создайте тестовый файл. Щелкните правой кнопкой мыши проект TestLibrary и выберите Добавить..., Класс. Назовите новый класс Tests.cs.
Замените содержимое файла Tests.cs приведенным ниже кодом.
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); } } }
В приведенном выше коде тестовый клиент создается с помощью
Mock
объекта из библиотеки Moq типа IHubCallerConnectionContext (в SignalR 2.1 присваиваетсяdynamic
параметру типа).) ИнтерфейсIHubCallerConnectionContext
— это прокси-объект, с помощью которого вызываются методы на клиенте. ЗатемbroadcastMessage
функция определяется для макетного клиента, чтобы ее можно было вызвать классомChatHub
. Затем модуль тестирования вызываетSend
методChatHub
класса , который, в свою очередь, вызывает макетированнуюbroadcastMessage
функцию.Выполните сборку решения, нажав клавишу F6.
Выполните модульный тест. В Visual Studio выберите Тест, Windows, Тест Обозреватель. В окне Test Обозреватель щелкните правой кнопкой мыши HubsAreMockableViaDynamic и выберите Выполнить выбранные тесты.
Убедитесь, что тест пройден, проверив нижнюю панель в окне Тест Обозреватель. В окне будет показано, что тест пройден.
Модульное тестирование по типу
В этом разделе вы добавите тест для приложения, созданного в начало работы учебнике, с помощью интерфейса, содержащего тестируемый метод.
Выполните шаги 1–7 в руководстве Модульное тестирование с помощью динамического руководства выше.
Замените содержимое файла Tests.cs приведенным ниже кодом.
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(); } } }
В приведенном выше коде создается интерфейс, определяющий сигнатуру
broadcastMessage
метода, для которого модуль тестирования создаст макет клиента. Затем создается макет клиента с помощьюMock
объекта типа IHubCallerConnectionContext (в SignalR 2.1 присваиваетсяdynamic
параметру типа). ИнтерфейсIHubCallerConnectionContext
— это прокси-объект, с помощью которого вызываются методы на клиенте.Затем тест создает экземпляр
ChatHub
, а затем создает макетную версиюbroadcastMessage
метода, которая, в свою очередь, вызывается путем вызоваSend
метода в концентраторе.Выполните сборку решения, нажав клавишу F6.
Выполните модульный тест. В Visual Studio выберите Тест, Windows, Тест Обозреватель. В окне Test Обозреватель щелкните правой кнопкой мыши HubsAreMockableViaDynamic и выберите Выполнить выбранные тесты.
Убедитесь, что тест пройден, проверив нижнюю панель в окне Тест Обозреватель. В окне будет показано, что тест пройден.