{"record":{"id":"00f03888d0d1f834","repo":"dotnet/reactive","slug":"value-cannot-be-null-parameter-create-testscheduler","errorCode":null,"errorMessage":"Value cannot be null. (Parameter 'create')","messagePattern":"Value cannot be null\\. \\(Parameter 'create'\\)","errorType":"exception","errorClass":"ArgumentNullException","httpStatus":null,"severity":"error","filePath":"Rx.NET/Source/src/Microsoft.Reactive.Testing/TestScheduler.cs","lineNumber":88,"sourceCode":"        }\n\n        /// <summary>\n        /// Starts the test scheduler and uses the specified virtual times to invoke the factory function, subscribe to the resulting sequence, and dispose the subscription.\n        /// </summary>\n        /// <typeparam name=\"T\">The element type of the observable sequence being tested.</typeparam>\n        /// <param name=\"create\">Factory method to create an observable sequence.</param>\n        /// <param name=\"created\">Virtual time at which to invoke the factory to create an observable sequence.</param>\n        /// <param name=\"subscribed\">Virtual time at which to subscribe to the created observable sequence.</param>\n        /// <param name=\"disposed\">Virtual time at which to dispose the subscription.</param>\n        /// <returns>Observer with timestamped recordings of notification messages that were received during the virtual time window when the subscription to the source sequence was active.</returns>\n        /// <exception cref=\"ArgumentNullException\"><paramref name=\"create\"/> is null.</exception>\n        /// <exception cref=\"ArgumentOutOfRangeException\"><paramref name=\"subscribed\"/> is less than <paramref name=\"created\"/>.</exception>\n        /// <exception cref=\"ArgumentOutOfRangeException\"><paramref name=\"disposed\"/> is less than <paramref name=\"created\"/> or <paramref name=\"subscribed\"/>.</exception>\n        public ITestableObserver<T> Start<T>(Func<IObservable<T>> create, long created, long subscribed, long disposed)\n        {\n            if (create == null)\n            {\n                throw new ArgumentNullException(nameof(create));\n            }\n\n            if (subscribed < created)\n            {\n                throw new ArgumentOutOfRangeException(nameof(subscribed));\n            }\n            if (disposed < created || disposed < subscribed)\n            {\n                throw new ArgumentOutOfRangeException(nameof(disposed));\n            }\n\n            var source = default(IObservable<T>);\n            var subscription = default(IDisposable);\n            var observer = CreateObserver<T>();\n\n            ScheduleAbsolute(default(object), created, (scheduler, state) => { source = create(); return Disposable.Empty; });\n            ScheduleAbsolute(default(object), subscribed, (scheduler, state) => { subscription = source.Subscribe(observer); return Disposable.Empty; });\n            ScheduleAbsolute(default(object), disposed, (scheduler, state) => { subscription.Dispose(); return Disposable.Empty; });","sourceCodeStart":70,"sourceCodeEnd":106,"githubUrl":"https://github.com/dotnet/reactive/blob/94b5d5ab912789f5abe9a72138a25bbd716fe59c/Rx.NET/Source/src/Microsoft.Reactive.Testing/TestScheduler.cs#L70-L106","documentation":"TestScheduler.Start<T>(Func<IObservable<T>>, long, long, long) throws ArgumentNullException when the create factory is null. The scheduler needs the factory to create the observable under test at the 'created' virtual time. The message names the parameter ('create').","triggerScenarios":"Calling scheduler.Start(null, created, subscribed, disposed) or passing a factory variable that is null, e.g. a builder returning null.","commonSituations":"Test helpers parameterized by an observable factory that was never assigned; conditional test setup that skips factory creation; refactors replacing a lambda with a method group that resolved to null (e.g. an uninitialized delegate field).","solutions":["Pass a non-null factory lambda, e.g. () => Observable.Return(42)","Fix the builder/helper that supplied the null factory","Validate the factory with the test framework before calling Start"],"exampleFix":"// before\nFunc<IObservable<int>> create = GetFactory(); // null on misconfiguration\nvar observer = scheduler.Start(create, 100, 200, 300);\n// after\nFunc<IObservable<int>> create = GetFactory() ?? (() => Observable.Empty<int>());\nvar observer = scheduler.Start(create, 100, 200, 300);","handlingStrategy":"validation","validationCode":"if (create == null) throw new InvalidOperationException(\"Observable factory was not set\");\nscheduler.Start(create, 100, 200, 300);","typeGuard":"bool HasFactory<T>(Func<IObservable<T>> f) => f is not null;","tryCatchPattern":"try { scheduler.Start(create, 100, 200, 300); }\ncatch (ArgumentNullException ex) when (ex.ParamName == \"create\")\n{\n    Assert.Fail(\"Test bug: create factory was null.\");\n}","preventionTips":["Pass lambda literals directly to Start when possible","Initialize factory delegates at declaration","Avoid nullable delegate fields in test helpers"],"tags":["unit-testing","rx","test-scheduler","null-argument"],"backgroundTag":"null-argument","analyzedSha":"94b5d5ab912789f5abe9a72138a25bbd716fe59c","analyzedAt":"2026-09-15T02:26:24.759Z","contentChangedAt":"2026-09-15T02:26:24.759Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}