{"id":39184588,"url":"https://github.com/maximiliysiss/grpc.net.testing.moq","last_synced_at":"2026-01-17T22:37:58.966Z","repository":{"id":41982144,"uuid":"424355695","full_name":"maximiliysiss/grpc.net.testing.moq","owner":"maximiliysiss","description":"Library to mocking gRPC client. Instead of Grpc.Core.Testing using extensions for Moq","archived":false,"fork":false,"pushed_at":"2025-05-19T21:08:04.000Z","size":57,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-11-27T12:41:23.310Z","etag":null,"topics":["grpc","mock","moq","net","testing"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/maximiliysiss.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-11-03T19:32:50.000Z","updated_at":"2025-06-30T22:49:20.000Z","dependencies_parsed_at":"2025-02-27T19:57:06.856Z","dependency_job_id":"07141955-24a4-4e84-b573-0ef214e97304","html_url":"https://github.com/maximiliysiss/grpc.net.testing.moq","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/maximiliysiss/grpc.net.testing.moq","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maximiliysiss%2Fgrpc.net.testing.moq","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maximiliysiss%2Fgrpc.net.testing.moq/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maximiliysiss%2Fgrpc.net.testing.moq/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maximiliysiss%2Fgrpc.net.testing.moq/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/maximiliysiss","download_url":"https://codeload.github.com/maximiliysiss/grpc.net.testing.moq/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maximiliysiss%2Fgrpc.net.testing.moq/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28521164,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T22:11:28.393Z","status":"ssl_error","status_checked_at":"2026-01-17T22:11:27.841Z","response_time":85,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["grpc","mock","moq","net","testing"],"created_at":"2026-01-17T22:37:58.886Z","updated_at":"2026-01-17T22:37:58.957Z","avatar_url":"https://github.com/maximiliysiss.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# grpc.net.testing.moq\n\n[![.NET](https://github.com/maximiliysiss/grpc.net.testing.moq/actions/workflows/dotnet.yml/badge.svg?branch=master\u0026event=push)](https://github.com/maximiliysiss/grpc.net.testing.moq/actions/workflows/dotnet.yml)\n\nLibrary to mocking gRPC client. Instead of `Grpc.Core.Testing` using extensions for `Moq`\n\nBased on libraries:\n\n* [Moq](https://www.nuget.org/packages/Moq)\n\n## Install\n\n### Nuget:\n\n`Install-Package Net.Testing.Moq.Grpc`\n\n## Using example\n\n\u003e There is naming policy aka `.Setup(...).Returns(...)`, but it cannot use with Delegates (only for values computed\n\u003e outside)\n\n### Simple sync calling:\n\n#### 1. Call with exists response\n\n```csharp\n// Creation moq\nvar grpcMock = new Mock\u003cTestService.TestServiceClient\u003e();\n\n// Setup and set return\ngrpcMock\n    .Setup(c =\u003e c.Simple(It.IsAny\u003cTestRequest\u003e(), null, null, default))\n    .ReturnsAsync(new TestResponse());\n\nvar client = grpcMock.Object;\n\n// Call\nvar response = client.Simple(new TestRequest());\n```\n\n### Simple async calling:\n\n#### 1. Call with exists response\n\n```csharp\n// Creation moq\nvar grpcMock = new Mock\u003cTestService.TestServiceClient\u003e();\nvar testResponse = new TestResponse();\n\n// Setup and set return\ngrpcMock\n    .Setup(c =\u003e c.SimpleAsync(It.IsAny\u003cTestRequest\u003e(), null, null, default))\n    .ReturnsAsync(testResponse);\n\nvar client = grpcMock.Object;\n\n// Call\nvar response = await client.SimpleAsync(new TestRequest());\n```\n\n#### 2. Call with response creating on call\n\n```csharp\n// Creation moq\nvar grpcMock = new Mock\u003cTestService.TestServiceClient\u003e();\n\n// Setup and set return by lambda\ngrpcMock\n    .Setup(c =\u003e c.SimpleAsync(It.IsAny\u003cTestRequest\u003e(), null, null, default))\n    .ReturnsAsync(() =\u003e new TestResponse());\n\nvar client = grpcMock.Object;\n\n// Call\nvar response = client.SimpleAsync(new TestRequest());\n```\n\n#### 3. Call with response creating on call and based on request\n\n```csharp\n// Creation moq\nvar grpcMock = new Mock\u003cTestService.TestServiceClient\u003e();\n\n// Setup and set return by lambda with request param\ngrpcMock\n    .Setup(c =\u003e c.SimpleAsync(It.IsAny\u003cTestRequest\u003e(), null, null, default))\n    .ReturnsAsync\u003cTestService.TestServiceClient, TestRequest, TestResponse\u003e(r =\u003e new TestResponse{ Val = r.Val });\n\nvar client = grpcMock.Object;\n\n// Call\nvar response = client.SimpleAsync(new TestRequest());\n```\n\n#### 4. Call with sequential results\n\n```csharp\n// Creation moq\nvar grpcMock = new Mock\u003cTestService.TestServiceClient\u003e();\n\n// Setup\ngrpcMock\n    .SetupSequence(c =\u003e c.SimpleAsync(It.IsAny\u003cTestRequest\u003e(), null, null, default))\n    .ReturnsAsync(firstExpectedResponse)\n    .ReturnsAsync(secondExpectedResponse);\n\nvar client = grpcMock.Object;\n\n// Call\nvar firstResponse = await client.SimpleAsync(new TestRequest());\nvar secondResponse = await client.SimpleAsync(new TestRequest());\n```\n\n### Simple client stream calling:\n\n#### 1. Call with exists response\n\n```csharp\n// Creation moq\nvar grpcMock = new Mock\u003cTestService.TestServiceClient\u003e();\nvar testResponse = new TestResponse();\n\n// Setup and set response\ngrpcMock\n    .Setup(c =\u003e c.SimpleClientStream(null, null, default))\n    .ReturnsAsync(testResponse);\n\nvar client = grpcMock.Object;\n\n// Call\nvar stream = client.SimpleClientStream();\nawait stream.RequestStream.WriteAllAsync(new[] {new TestRequest()}, true);\nvar response = await stream;\n```\n\n#### 2. Call with response creating on call\n\n```csharp\n// Creation moq\nvar grpcMock = new Mock\u003cTestService.TestServiceClient\u003e();\nvar testResponse = new TestResponse();\n\n// Setup and set response by lambda\ngrpcMock\n    .Setup(c =\u003e c.SimpleClientStream(null, null, default))\n    .ReturnsAsync(() =\u003e testResponse);\n\nvar client = grpcMock.Object;\n\n// Call\nvar stream = client.SimpleClientStream();\nawait stream.RequestStream.WriteAllAsync(new[] {new TestRequest()}, true);\nvar response = await stream;\n```\n\n#### 3. Call with response creating on call and based on request\n\n```csharp\n// Creation moq\nvar grpcMock = new Mock\u003cTestService.TestServiceClient\u003e();\n\n// Setup and set response by lambda and requests like param\ngrpcMock\n    .Setup(c =\u003e c.SimpleClientStream(null, null, default))\n    .ReturnsAsync(rs =\u003e new TestResponse{ Val = rs.Sum(r =\u003e r.Val) });\n\nvar client = grpcMock.Object;\n\n// Call\nvar stream = client.SimpleClientStream();\nawait stream.RequestStream.WriteAllAsync(new[] {new TestRequest()}, true);\nvar response = await stream;\n```\n\n#### 4. Call with sequential results\n\n```csharp\n// Creation moq\nvar grpcMock = new Mock\u003cTestService.TestServiceClient\u003e();\n\n// Setup\ngrpcMock\n    .SetupSequence(c =\u003e c.SimpleClientStream(null, null, default))\n    .ReturnsAsync(firstExpectedResponses)\n    .ReturnsAsync(secondExpectedResponses);\n\nvar client = grpcMock.Object;\n\n// Call\nvar firstCall = client.SimpleClientStream();\nawait firstCall.RequestStream.CompleteAsync();\n\nvar firstMessage = await firstCall;\n\nvar secondCall = client.SimpleClientStream();\nawait secondCall.RequestStream.CompleteAsync();\n\nvar secondMessage = await secondCall;\n```\n\n### Simple server stream calling:\n\n#### 1. Call with exists response\n\n```csharp\n// Creation moq\nvar grpcMock = new Mock\u003cTestService.TestServiceClient\u003e();\nvar testResponse = new[]{ new TestResponse() };\n\n// Setup and set responses like argument (params TResponse[] responses)\ngrpcMock\n    .Setup(c =\u003e c.SimpleServerStream(It.IsAny\u003cTestRequest\u003e(), null, null, default))\n    .ReturnsAsync(testResponse);\n\nvar client = grpcMock.Object;\n\n// Call\nvar stream = client.SimpleServerStream(new TestRequest());\nvar responses = stream.ResponseStream.ReadAllAsync();\n```\n\n#### 2. Call with response creating on call\n\n```csharp\n// Creation moq\nvar grpcMock = new Mock\u003cTestService.TestServiceClient\u003e();\nvar testResponse = new[]{ new TestResponse() };\n\n// Setup and set responses by lambda (factory)\ngrpcMock\n    .Setup(c =\u003e c.SimpleServerStream(It.IsAny\u003cTestRequest\u003e(), null, null, default))\n    .ReturnsAsync(() =\u003e testResponse);\n\nvar client = grpcMock.Object;\n\n// Call\nvar stream = client.SimpleServerStream(new TestRequest());\nvar responses = stream.ResponseStream.ReadAllAsync();\n```\n\n#### 3. Call with response creating on call and based on request\n\n```csharp\n// Creation moq\nvar grpcMock = new Mock\u003cTestService.TestServiceClient\u003e();\n\n// Setup and set responses by lambda and request like argument\ngrpcMock\n    .Setup(c =\u003e c.SimpleServerStream(It.IsAny\u003cTestRequest\u003e(), null, null, default))\n    .ReturnsAsync\u003cTestService.TestServiceClient, TestRequest, TestResponse\u003e(r =\u003e new[]{ new TestResponse{ Val = r.Val } });\n\nvar client = grpcMock.Object;\n\n// Call\nvar stream = client.SimpleServerStream(new TestRequest());\nvar responses = stream.ResponseStream.ReadAllAsync();\n```\n\n#### 4. Call with sequential results\n\n```csharp\n// Creation moq\nvar grpcMock = new Mock\u003cTestService.TestServiceClient\u003e();\n\n// Setup\ngrpcMock\n    .SetupSequence(c =\u003e c.SimpleServerStream(It.IsAny\u003cTestRequest\u003e(), null, null, default))\n    .ReturnsAsync(firstExpectedResponses)\n    .ReturnsAsync(secondExpectedResponses);\n\nvar client = grpcMock.Object;\n\n// Call\nvar firstMessages = await client.SimpleServerStream(new TestRequest()).ResponseStream.ReadAllAsync().ToArrayAsync();\nvar secondMessages = await client.SimpleServerStream(new TestRequest()).ResponseStream.ReadAllAsync().ToArrayAsync();\n```\n\n### Simple client server streams calling:\n\n#### 1. Call with exists response\n\n```csharp\n// Creation moq\nvar grpcMock = new Mock\u003cTestService.TestServiceClient\u003e();\nvar testResponse = new[]{ new TestResponse() };\n\n// Setup and set responses like argument (params TResponse[] responses)\ngrpcMock\n    .Setup(c =\u003e c.SimpleClientServerStream(null, null, default))\n    .ReturnsAsync(testResponse);\n\nvar client = grpcMock.Object;\n\n// Call\nvar stream = client.SimpleClientServerStream();\nawait stream.RequestStream.WriteAsync(new TestRequest(), true);\nvar responses = stream.ResponseStream.ReadAllAsync();\n```\n\n#### 2. Call with response creating on call\n\n```csharp\n// Creation moq\nvar grpcMock = new Mock\u003cTestService.TestServiceClient\u003e();\nvar testResponse = new[]{ new TestResponse() };\n\n// Setup and set responses by lambda\ngrpcMock\n    .Setup(c =\u003e c.SimpleClientServerStream(null, null, default))\n    .ReturnsAsync(() =\u003e testResponse);\n\nvar client = grpcMock.Object;\n\n// Call\nvar stream = client.SimpleClientServerStream();\nawait stream.RequestStream.WriteAsync(new TestRequest(), true);\nvar responses = stream.ResponseStream.ReadAllAsync();\n```\n\n#### 3. Call with response creating on call and based on request\n\n```csharp\n// Creation moq\nvar grpcMock = new Mock\u003cTestService.TestServiceClient\u003e();\nvar testResponse = new[]{ new TestResponse() };\n\n// Setup and set responses by lambda and requests like args\ngrpcMock\n    .Setup(c =\u003e c.SimpleClientServerStream(null, null, default))\n    .ReturnsAsync(rs =\u003e rs.Select(r =\u003e new TestResponse{ Val = r.Val }));\n\nvar client = grpcMock.Object;\n\n// Call\nvar stream = client.SimpleClientServerStream();\nawait stream.RequestStream.WriteAsync(new TestRequest(), true);\nvar responses = stream.ResponseStream.ReadAllAsync();\n```\n\n#### 4. Using reactive handling\n\n```csharp\n// Creation moq\nvar grpcMock = new Mock\u003cTestService.TestServiceClient\u003e();\nvar testResponse = new[]{ new TestResponse() };\n\n// Setup and set responses by lambda and requests like args\ngrpcMock\n    .Setup(c =\u003e c.SimpleClientServerStream(null, null, default))\n    .ReturnsAsync(r =\u003e new TestResponse{ Val = r.Val });\n\nvar client = grpcMock.Object;\n\n// Call\nvar stream = client.SimpleClientServerStream();\nawait stream.RequestStream.WriteAsync(new TestRequest(), true);\nvar responses = stream.ResponseStream.ReadAllAsync();\n```\n\n#### 5. Call with sequential results\n\n```csharp\n// Creation moq\nvar grpcMock = new Mock\u003cTestService.TestServiceClient\u003e();\n\n// Setup\ngrpcMock\n    .SetupSequence(c =\u003e c.SimpleClientServerStream(null, null, default))\n    .ReturnsAsync(firstExpectedResponses)\n    .ReturnsAsync(secondExpectedResponses);\n\nvar client = grpcMock.Object;\n\n// Call\nvar firstCall = client.SimpleClientServerStream();\nawait firstCall.RequestStream.CompleteAsync();\n\nvar firstMessages = await firstCall.ResponseStream\n    .ReadAllAsync()\n    .ToArrayAsync();\n\nvar secondCall = client.SimpleClientServerStream();\nawait secondCall.RequestStream.CompleteAsync();\n\nvar secondMessages = await secondCall.ResponseStream\n    .ReadAllAsync()\n    .ToArrayAsync();\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaximiliysiss%2Fgrpc.net.testing.moq","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmaximiliysiss%2Fgrpc.net.testing.moq","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaximiliysiss%2Fgrpc.net.testing.moq/lists"}