Skip to content

Skugga vs Others

A comprehensive comparison of Skugga against other .NET mocking frameworks.

At a Glance

FeatureSkuggaMoqNSubstituteFakeItEasy
Native AOTYesNoNoNo
Zero ReflectionYesNoNoNo
Compile-TimeYesNoNoNo
Familiar APIYes (Moq-compat)N/ADifferentDifferent
Chaos EngineeringYesNoNoNo
OpenAPI MockingYesNoNoNo
Zero-Alloc TestingYesNoNoNo
Self-Writing TestsYesNoNoNo

Performance

Comprehensive benchmarks across 12 scenarios (50,000 iterations each):

FrameworkSpeed vs SkuggaNotes
SkuggaBaselineCompile-time, zero reflection
Moq2.6-80x slower80x slower on argument matching
NSubstitute3.5x slowerConsistent but reflection-heavy
FakeItEasy3.9x slowerSimilar overhead across scenarios

Key Findings

  • Overall: Skugga is 6.36x faster than Moq
  • Argument Matching: 79.84x faster
  • Void Method Setup: 59.26x faster
  • Callback Execution: 53.34x faster
  • Mock Creation: 15.29x faster

Real-World Impact

For a test suite with 10,000 tests using argument matchers:

  • Skugga: 2.7 seconds
  • Moq: 218 seconds
  • Saved: 215 seconds per test run

Why is Skugga Faster?

Legacy libraries use System.Reflection.Emit to generate proxy classes at runtime. This incurs heavy CPU penalties and forces the JIT compiler to work overtime.

Skugga does all heavy lifting at compile-time:

  • Zero JIT Penalties -- Code is already compiled to native machine code
  • Zero Reflection -- No Expression.Lambda().Compile() or MethodInfo lookups
  • Zero Dynamic Allocation -- No Castle.DynamicProxy or similar
  • Optimized Dispatch -- Simple dictionary lookups instead of reflection

Released under the MIT License.