Is this expected behavior?
Yep, this is new for ReactiveUI 6.0.
Was it done for efficiency (e.g. lazy instantiation) reasons?
Correct - it actually can end up saving a lot of memory and work! (15-20% memory as I recall in GitHub for Windows on my early tests)
This is an interesting scenario though - I suspect that in the unit test runner, we should be subscribing on construction, similar to what RxUI 5.x did.
Edit: I would write it this way:
_executeSearch = ReactiveCommand.Create(_ => Observable.Return(x)
.Where(x => x is string)
.SelectMany(x => _searchParser.GetPaperFinders(x as string))
.SelectMany(x => x.FindPaper()));
_executeSearch
.Select(x => x.Item1.Title)
.ToProperty(this, x => x.Title, out _TitleOAPH, "");
Now, you can write your test way easier, without TestScheduler:
var vm = new AddCDSPaperViewModel(obj, parser);
var result = await vm.ExecuteSearch.ExecuteAsync("Some String");
Assert.AreEqual("title", result.Title);