public async Task CodeRunnerConsoleInTestAsync() { // Arrange - Clients var mockClients = new Mock <IHubCallerConnectionContext <ICodeRunnerHubClient> >(); var mockCaller = new Mock <ICodeRunnerHubClient>(); mockClients.Setup(m => m.Caller).Returns(mockCaller.Object); // Arrange - Context var context = new HubCallerContext(null, "CodeRunnerConsoleInTestAsyncConnection"); // Arrange - Runner string code = "<Test code>"; ICodeRunner stubRunner = new CodeRunnerStub(); // Arrange - Repository var userServices = new Mock <IUserServices>(); userServices.Setup(r => r.GetCurrentUserId()).Returns("UnitTestId"); var mockDb = new Mock <ICodingTrainerRepository>(); // Arrange - Class under test - Hub var hub = new CodeRunnerHub(stubRunner, userServices.Object, mockDb.Object) { Clients = mockClients.Object, Context = context }; // Arrange - set up Caller mockCaller.Setup(c => c.ConsoleOut("Hello Test")).Callback(() => hub.ConsoleIn("Console In")); // Act await hub.Run(code); // Assert Assert.Multiple(() => { mockCaller.Verify(c => c.ConsoleOut("Hello Test"), Times.Once); mockCaller.Verify(c => c.ConsoleOut("Received"), Times.Once); mockCaller.Verify(c => c.Complete(), Times.Once); }); }
public async Task CodeRunnerTestAsync() { // Arrange - Clients var mockClients = new Mock <IHubCallerConnectionContext <ICodeRunnerHubClient> >(); var mockCaller = new Mock <ICodeRunnerHubClient>(); mockClients.Setup(m => m.Caller).Returns(mockCaller.Object); // Arrange - Context var context = new HubCallerContext(null, "CodeRunnerTestAsyncConnection"); // Arrange - Runner string code = "<Test code>"; var mockRunner = new Mock <ICodeRunner>(); mockRunner.Setup(r => r.CompileAndRunAsync(code)).Returns(Task.CompletedTask).Raises(r => r.ConsoleWrite += null, new ConsoleWriteEventArgs("Hello Test")); // Arrange - Repository var userServices = new Mock <IUserServices>(); userServices.Setup(r => r.GetCurrentUserId()).Returns("UnitTestId"); var mockDb = new Mock <ICodingTrainerRepository>(); // Arrange - Class under test - Hub var hub = new CodeRunnerHub(mockRunner.Object, userServices.Object, mockDb.Object) { Clients = mockClients.Object, Context = context }; // Act await hub.Run(code); // Assert Assert.Multiple(() => { mockCaller.Verify(c => c.ConsoleOut("Hello Test"), Times.Once); mockCaller.Verify(c => c.Complete(), Times.Once); }); }