{"id":17991760,"url":"https://github.com/x2bool/mockup","last_synced_at":"2026-02-27T20:02:09.488Z","repository":{"id":249434028,"uuid":"831462583","full_name":"x2bool/mockup","owner":"x2bool","description":"Zero-reflection, compile-time mocking library based on C# source generators","archived":false,"fork":false,"pushed_at":"2024-09-21T14:39:59.000Z","size":68,"stargazers_count":46,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-16T22:20:30.364Z","etag":null,"topics":["csharp","csharp-sourcegenerator","mock","mocking","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/x2bool.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":"2024-07-20T16:10:49.000Z","updated_at":"2025-01-01T06:52:08.000Z","dependencies_parsed_at":"2024-08-24T17:41:55.173Z","dependency_job_id":"fb0ee59c-9473-4821-940b-b55b485a5d47","html_url":"https://github.com/x2bool/mockup","commit_stats":null,"previous_names":["x2bool/mockup"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/x2bool%2Fmockup","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/x2bool%2Fmockup/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/x2bool%2Fmockup/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/x2bool%2Fmockup/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/x2bool","download_url":"https://codeload.github.com/x2bool/mockup/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245562300,"owners_count":20635897,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["csharp","csharp-sourcegenerator","mock","mocking","testing"],"created_at":"2024-10-29T19:24:07.877Z","updated_at":"2026-02-27T20:02:04.448Z","avatar_url":"https://github.com/x2bool.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Mockup - zero-reflection, compile-time mocking\n\nC# Source Generators for efficient mocking\n\n[![NuGet](https://img.shields.io/nuget/v/Mockup.svg)](https://www.nuget.org/packages/Mockup/)\n[![NuGet](https://img.shields.io/nuget/v/Mockup.Analyzers.svg)](https://www.nuget.org/packages/Mockup.Analyzers/)\n\n### Demo\n\nGiven an interface:\n\n\n```csharp\npublic interface IObjectService\n{   \n    object ReadWriteProperty { get; set; }\n\n    object SingleArgReturnMethod(object arg);\n}\n```\n\nMock it in your test code:\n\n```csharp\nusing Mockup;\nusing Xunit;\n\n// This will generate mock; use Mock(typeof(IObjectService)) for C# \u003c 11.0\n[assembly: Mock\u003cIObjectService\u003e]\n\nnamespace Mockup.Tests;\n\npublic class ObjectServiceMockTests\n{\n    [Fact]\n    public void TestReadWriteProperty()\n    {\n        object value = \"Value\";\n        \n        var objectService = new ObjectServiceMock()\n            .ReadWriteProperty(() =\u003e value, v =\u003e value = v)\n            .Build(); // This will produce IObjectService\n        \n        // Your test code...\n        var result = objectService.ReadWriteProperty; // returns \"Value\"\n    }\n\n    [Fact]\n    public void TestSingleArgReturnMethod()\n    {\n        var objectService = new ObjectServiceMock()\n            .SingleArgReturnMethod(v =\u003e \"Changed\" + v)\n            .Build(); // This will produce IObjectService\n\n        // Your test code...\n        var result = objectService.SingleArgReturnMethod(\"Value\"); // returns \"ChangedValue\"\n    }\n}\n```\n\n### Installation\n\nInstall Mockup via NuGet package: `Mockup`, `Mockup.Analyzers`\n\n```xml\n\u003cPackageReference Include=\"Mockup\" Version=\"0.5.0\" /\u003e\n\u003cPackageReference Include=\"Mockup.Analyzers\" Version=\"0.5.0\"\u003e\n    \u003cPrivateAssets\u003eall\u003c/PrivateAssets\u003e\n    \u003cIncludeAssets\u003eruntime; build; native; contentfiles; analyzers\u003c/IncludeAssets\u003e\n\u003c/PackageReference\u003e\n```\n\n### Benchmarks\n\n```\nBenchmarkDotNet v0.13.12, macOS Ventura 13.6.6 (22G630) [Darwin 22.6.0]\nIntel Core i5-7267U CPU 3.10GHz (Kaby Lake), 1 CPU, 4 logical and 2 physical cores\n.NET SDK 8.0.301 [Host]     : .NET 8.0.6 (8.0.624.26715), X64 RyuJIT AVX2\n```\n\nReturn string provided by a varialbe:\n\n| Method      | Mean        | Error      | StdDev     | Gen0   | Gen1   | Gen2   | Allocated |\n|------------ |------------:|-----------:|-----------:|-------:|-------:|-------:|----------:|\n| Mockup      |    34.60 ns |   0.599 ns |   0.531 ns | 0.0688 |      - |      - |     144 B |\n| Moq         | 4,380.75 ns |  58.442 ns |  51.808 ns | 1.8616 |      - |      - |    3905 B |\n| NSubstitute | 5,410.08 ns | 105.646 ns | 121.662 ns | 3.7384 |      - |      - |    7833 B |\n| FakeItEasy  | 5,701.07 ns | 107.159 ns | 114.659 ns | 2.4109 | 0.0153 | 0.0076 |    5057 B |\n\nReturn string passed as an argument:\n\n| Method      | Mean         | Error        | StdDev     | Gen0   | Gen1   | Gen2   | Allocated |\n|------------ |-------------:|-------------:|-----------:|-------:|-------:|-------:|----------:|\n| Mockup      |     16.39 ns |     0.392 ns |   0.347 ns | 0.0268 |      - |      - |      56 B |\n| Moq         | 76,471.38 ns | 1,119.135 ns | 934.529 ns | 4.1504 | 1.2207 | 0.4883 |    9118 B |\n| NSubstitute |  6,309.30 ns |   115.183 ns | 107.743 ns | 3.7537 |      - |      - |    7905 B |\n| FakeItEasy  |  6,377.44 ns |   121.293 ns | 129.783 ns | 2.7771 | 0.0305 | 0.0305 |    5861 B |\n\n### TODO\n\nThis is an early stage, experimental project. The following is not done:\n\n* Mocking generic types\n* Custom names for mocks\n* Arbitrary namespace for mocks\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fx2bool%2Fmockup","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fx2bool%2Fmockup","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fx2bool%2Fmockup/lists"}