-
Notifications
You must be signed in to change notification settings - Fork 277
Description
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 contractIList<IArgumentSpecification> DequeueAllArgumentSpecifications(); -
Refactor
ICall
and replaceGet
methods with properties
NSubstitute/src/NSubstitute/Core/ICall.cs
Lines 8 to 19 in a2462d5
public interface ICall { Type GetReturnType(); MethodInfo GetMethodInfo(); object[] GetArguments(); object[] GetOriginalArguments(); object Target(); IParameterInfo[] GetParameterInfos(); IList<IArgumentSpecification> GetArgumentSpecifications(); void AssignSequenceNumber(long number); long GetSequenceNumber(); bool CanCallBase { get; } -
Make
NSubstitute.Core.Argument
a read-only struct, as it's a thin wrapper on top ofICall
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.
- Have only
-
Make the
ReflectionExtensions
helper internal and removeOrNull
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 toTry
pattern. -
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.