Se si desidera verificare che un certo gruppo è stato notificato si dovrebbe essere in grado di fare qualcosa di simile (questo è SignalR 2):
public interface IClientContract
{
void RaiseAlert(string message);
}
[Test]
public void NotifiesOnlySpecifiedGroupWhenGroupIdSent()
{
// Adapted from code here: https://github.com/SignalR/SignalR/blob/dev/tests/Microsoft.AspNet.SignalR.Tests/Server/Hubs/HubFacts.cs
// Arrange
// Set up the individual mock clients
var group1 = new Mock<IClientContract>();
var group2 = new Mock<IClientContract>();
var group3 = new Mock<IClientContract>();
group1.Setup(m => m.RaiseAlert(It.IsAny<string>())).Verifiable();
group2.Setup(m => m.RaiseAlert(It.IsAny<string>())).Verifiable();
group3.Setup(m => m.RaiseAlert(It.IsAny<string>())).Verifiable();
// set the Connection Context to return the mock clients
var mockClients = new Mock<IHubCallerConnectionContext<dynamic>>();
mockClients.Setup(m => m.Group("1")).Returns(group1.Object);
mockClients.Setup(m => m.Group("2")).Returns(group2.Object);
mockClients.Setup(m => m.Group("3")).Returns(group3.Object);
// Assign our mock context to our hub
var hub = new NotificationsHub
{
Clients = mockClients.Object
};
// Act
hub.RaiseNotificationAlert("2");
// Assert
group1.Verify(m => m.RaiseAlert(It.IsAny<string>()), Times.Never);
group2.Verify(m => m.RaiseAlert(""), Times.Once);
group3.Verify(m => m.RaiseAlert(It.IsAny<string>()), Times.Never);
}
Il codice sopra indica che il mio metodo NotificationsHub.RaiseAlert(string groupId)
viene attivato solo sul lato client per il passaggio specifico groupId
.
Questo è l'hub sottoposto a test:
public class NotificationsHub : Hub
{
public void RaiseAlert(string message)
{
Clients.All.RaiseAlert(message);
}
public void RaiseNotificationAlert(string groupId)
{
if (groupId== null)
{
// Notify all clients
Clients.All.RaiseAlert("");
return;
}
// Notify only the client for this userId
Clients.Group(groupId).RaiseAlert("");
}
}
Questo è l'esempio che ho originariamente iniziato con. È davvero personalizzato per l'applicazione di chat di esempio signalr. È un buon inizio, ma non entra nei dettagli di cui ho bisogno. I messaggi vengono trasmessi ai client "ALL". Devo prendere in giro l'oggetto del gruppo in modo che possa trasmettere ai membri di gruppi specifici come parte dei miei test di unità. (Si prega di fare riferimento al codice di esempio sopra). Qualcuno può aiutarmi a indicarmi come imitare un oggetto di gruppo? JB – JohnB
Hai mai trovato una risposta a questo problema? – Joe