{"record":{"id":"fd9ce66808d3df62","repo":"devlooped/moq","slug":"value-argument-is-out-of-range-mockfactory","errorCode":null,"errorMessage":"value (Argument is out of range)","messagePattern":"value \\(Argument is out of range\\)","errorType":"exception","errorClass":"ArgumentOutOfRangeException","httpStatus":null,"severity":"error","filePath":"src/Moq/Obsolete/MockFactory.cs","lineNumber":149,"sourceCode":"        public bool CallBase { get; set; }\n\n        /// <summary>\n        /// Specifies the behavior to use when returning default values for \n        /// unexpected invocations on loose mocks.\n        /// </summary>\n        public DefaultValue DefaultValue\n        {\n            get\n            {\n                return this.DefaultValueProvider.Kind;\n            }\n            set\n            {\n                this.DefaultValueProvider = value switch\n                {\n                    DefaultValue.Empty => DefaultValueProvider.Empty,\n                    DefaultValue.Mock => DefaultValueProvider.Mock,\n                    _ => throw new ArgumentOutOfRangeException(nameof(value)),\n                };\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the <see cref=\"Moq.DefaultValueProvider\"/> instance that will be used\n        /// e. g. to produce default return values for unexpected invocations.\n        /// </summary>\n        public DefaultValueProvider DefaultValueProvider\n        {\n            get => this.defaultValueProvider;\n            set => this.defaultValueProvider = value ?? throw new ArgumentNullException(nameof(value));\n        }\n\n        /// <summary>\n        /// Gets the mocks that have been created by this factory and \n        /// that will get verified together.\n        /// </summary>","sourceCodeStart":131,"sourceCodeEnd":167,"githubUrl":"https://github.com/devlooped/moq/blob/89a5be629c752960fe403e95ff583e4ae6f00542/src/Moq/Obsolete/MockFactory.cs#L131-L167","documentation":"The obsolete MockFactory DefaultValue setter only accepts DefaultValue.Empty or DefaultValue.Mock; any other enum value throws ArgumentOutOfRangeException with paramName 'value'. The switch expression maps the legacy DefaultValue enum onto the modern DefaultValueProvider, and the discard arm is the explicit rejection of unknown values.","triggerScenarios":"Setting factory.DefaultValue = (DefaultValue)someInt where the int is not 0 (Empty) or 1 (Mock), e.g. an uninitialized/corrupted enum field or a cast from an integer config value.","commonSituations":"Deserializing configuration into a DefaultValue enum without validating; refactoring that renamed enum members; passing a value from another enum via cast.","solutions":["Only assign DefaultValue.Empty or DefaultValue.Mock to the factory's DefaultValue property","Validate the enum value before assigning: Enum.IsDefined(typeof(DefaultValue), value)","If you need custom default value behavior, set the DefaultValueProvider property with a DefaultValueProvider instance instead"],"exampleFix":"// before\nfactory.DefaultValue = (DefaultValue)configValue; // throws if not 0/1\n// after\nif (Enum.IsDefined(typeof(DefaultValue), configValue))\n    factory.DefaultValue = (DefaultValue)configValue;\nelse\n    factory.DefaultValueProvider = DefaultValueProvider.Mock;","handlingStrategy":"validation","validationCode":"if (!Enum.IsDefined(typeof(DefaultValue), value))\n    throw new ArgumentOutOfRangeException(nameof(value));\nfactory.DefaultValue = value;","typeGuard":null,"tryCatchPattern":"try\n{\n    factory.DefaultValue = value;\n}\ncatch (ArgumentOutOfRangeException ex)\n{\n    // ex.ParamName == \"value\"; fall back to a safe default\n    factory.DefaultValueProvider = DefaultValueProvider.Empty;\n}","preventionTips":["Never cast arbitrary ints to the DefaultValue enum","Validate enum values with Enum.IsDefined before assignment","Prefer setting DefaultValueProvider directly instead of the legacy DefaultValue property"],"tags":["moq","argumentoutofrange","enum","mockfactory"],"backgroundTag":"invalid-enum-value","analyzedSha":"89a5be629c752960fe403e95ff583e4ae6f00542","analyzedAt":"2026-09-16T05:31:39.496Z","contentChangedAt":"2026-09-16T05:31:39.496Z","schemaVersion":2},"datasetVersion":"2026-09-16T09:17:16.951Z"}