2017-05-25 15 views
1

私はSignalRアプリケーションのモックテストケースを作成しています。私はちょうどUnit Testing SignalR Applicationsの助けを借りて始めましたが、私の要件はそこに示されている例と少し異なります。 以下は、私がグーグルで行ったコードです。SignalR Clientsを模擬する方法。ユニットテストのグループ

SignalRHub

public class HubServer : Hub 
{ 
    [HubMethodName("SendNofication")] 
    public void GetNofication(string message) 
    { 
     try 
     { 
      Clients.Group("Manager").BroadCast(message); 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.Message); 
     } 
    }   
} 

ユニットテスト

public interface IClientContract { } 

[TestMethod] 
public void GetNoficationTest() 
{ 
    var hub = new HubServer(); 
    var mockClients = new Mock<IHubCallerConnectionContext<dynamic>>(); 
    hub.Clients = mockClients.Object; 
    var all = new Mock<IClientContract>(); 
    string message = "Message to send"; 

    mockClients.Setup(m => m.Group("Manager")).Returns(message); 
    mockClients.Setup(m => m.All).Returns(all.Object); 

    hub.GetNofication("Mock call to SingalR hub"); 
    all.VerifyAll(); 
} 

私はユニットテストアプリケーションでの初心者ですが、ただ、これはSignalRグループを模擬するための正しい方法であるかどうかを確認します。 Microsoft.AspNet.SignalR.Tests

ハブグループから

+1

を返すことをあなたはすべてのエラーを取得しているか、これはコードレビューであることを意味する?与えられたExpandoObjectを使用してグループになり

[TestMethod] public void _GetNoficationTest() { // Arrange. var hub = new HubServer(); var mockClients = new Mock<IHubCallerConnectionContext<dynamic>>(); var groups = new Mock<IClientContract>(); var message = "Message to send"; var groupName = "Manager"; hub.Clients = mockClients.Object; groups.Setup(_ => _.Broadcast(message)).Verifiable(); mockClients.Setup(_ => _.Group(groupName)).Returns(groups.Object); // Act. hub.GetNofication(message); // Assert. groups.VerifyAll(); } 

Nkosi

+0

@Nkosiエラーはありません。テストは正常に終了しました。コードレビューが模擬するのが正しいかどうかを確認するだけです。そうでない場合は、それを修正するためにあなたの助けが必要です。 – Shri

+0

私は上記のコードをテストし、それは合格しませんでした。私の答えは、あなたのコードがうまくいかなかったという事実に基づいています。 – Nkosi

答えて

1

使用例は

クライアント契約が必要な方法で更新する必要がMockableです。この場合、あなたはハブの依存関係を設定してテストを手配し、テスト対象のメソッドを行使ハブ

public interface IClientContract { 
    void Broadcast(string message); 
} 

次に呼ばれている方法を一致させるためにBroadcastメソッドを追加する必要があります。別のオプションは偽にこのインスタンスでClients.Groupdynamic

[TestMethod] 
public void _GetNoficationTest_Expando() { 
    // Act. 
    var hub = new HubServer(); 
    var mockClients = new Mock<IHubCallerConnectionContext<dynamic>>(); 
    dynamic groups = new ExpandoObject(); 
    var expected = "Message to send"; 
    string actual = null; 
    var groupName = "Manager"; 
    bool messageSent = false; 

    hub.Clients = mockClients.Object; 
    groups.Broadcast = new Action<string>(m => { 
     actual = m; 
     messageSent = true; 
    }); 
    mockClients.Setup(_ => _.Group(groupName)).Returns((ExpandoObject)groups); 

    // Act. 
    hub.GetNofication(expected); 

    // Assert. 
    Assert.IsTrue(messageSent); 
    Assert.AreEqual(expected, actual); 
} 
関連する問題