NSubstitute icon indicating copy to clipboard operation
NSubstitute copied to clipboard

NSubstitute future improvements

Open zvirja opened this issue 6 years ago • 1 comments

Let's collect improvements we could/should make in our next major versions and are not allowed to apply now because of SemVer. Issue might be updated.

  • [ ] Make RouteAction a read-only struct to optimize performance

  • [ ] Return array instead of IList, so we can optimize contract

    https://github.com/nsubstitute/NSubstitute/blob/deea0eaf8e2a193d3a1ccccd308a3a53460e786a/src/NSubstitute/Core/IThreadLocalContext.cs#L27

  • [ ] Refactor ICall and replace Get methods with properties https://github.com/nsubstitute/NSubstitute/blob/a2462d5953e6099dde26d5f0a4d0045898210aa7/src/NSubstitute/Core/ICall.cs#L8-L19

  • [ ] Make NSubstitute.Core.Argument a read-only struct, as it's a thin wrapper on top of ICall and index.

  • [ ] Rework IAutoValueProvider interface to:

    • Have only bool TryCreateValue(Type type, out object result) method
    • Avoid cyclic dependency from provider to list of all providers
    • Expose single aggregate provider from factory rather than an array of providers.
  • [ ] Make the ReflectionExtensions helper internal and remove OrNull suffix as we use nullability for that.

  • [ ] Normalize Extension-like classes, as at the moment we have a plenty of them and it's a bit hard to navigate through them.

  • [ ] Add class constraint to all the DSL extension methods receiving substitute. Example: ReceivedExtensions.Received()

  • [ ] Review IPendingSpecification interface and potentially change it to Try pattern.

  • [x] Convert to a record once we drop .NET Standard 1.3 support:

    • ArgumentMatchInfo
    • Quantity descendants
  • [ ] Do not expose internal classes from Core namespace, but instead expose interfaces.

  • [ ] Make SubsitutionContext constructor private, so it can be instantiated via container only.

  • [ ] Change return type of ArgumentMatchInfo.DescribeNonMatch to return null if cannot describe instead of an empty string.

zvirja avatar Apr 22 '19 20:04 zvirja