Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Предупреждение
Эта документация не подходит для последней версии 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.SignalRInstall-Package MoqInstall-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", "Обозреватель тестов". В окне обозревателя тестов щелкните правой кнопкой мыши HubsAreMockableViaDynamic и выберите "Выполнить выбранные тесты".
Убедитесь, что тест прошел, проверив нижнюю панель в окне обозревателя тестов. В окне показано, что пройден тест.
Модульное тестирование по типу
В этом разделе описано, как добавить тест для приложения, созданного в руководстве по началу работы , с помощью интерфейса, содержащего тестируемый метод.
Выполните шаги 1-7 в руководстве Модульное тестирование с Dynamic выше.
Замените содержимое 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", "Обозреватель тестов". В окне обозревателя тестов щелкните правой кнопкой мыши HubsAreMockableViaDynamic и выберите "Выполнить выбранные тесты".
Убедитесь, что тест прошел, проверив нижнюю панель в окне обозревателя тестов. В окне показано, что пройден тест.