There is a .NET Core project under the Run folder called VM, and which is compiled into VM.exe.
This project has a reference to the following shared projects:
Unlike the UI based runtimes (UWP, Android and iOS) this runtime does not reference the View.UI project, making it a simple and pure runtime to develop and test your app's view model, domain, integrations, etc. It also encourages you to maintain a strict separation of concerns, with a ViewModel that is clean from any UI framework dependencies.
This has several benefits:
When starting your app using VM.exe, the StartUp logic is executed and your first page is established.
At this point, in the command prompt, you will see something like the following:
It shows you:
Compare that with a real user interface, where you would see the page, the data, and a button for each action that you can take. From there, the user is expecetd to tap a button (or another gesture) to go from that page (state) to another.
Similarly, in the VM.exe mode, you will see an option to choose to invoke, for each action (method) on the view model. Every time that you select an action, the method will be invoked, in which case either the page state (bindable properties) will be changed, or you will move to another page. This creates an infinite loop, whereby you can interact with the app using simple command selections and simulate a full workflow.
In the above example, if you type the button number (1) and press enter, the following will happen:
Basically, the console is showing you that the current page is now "LoginPage". Its bindable properties of Email and Password are both holding the current value of NULL. And you have 2 action choices.
In addition, at every step, you will be able to change the value of the bindable properties (Email and Password in the above example) using the following:
Email=hello@test.com
Of course in the real app UI, you will have data input controls for this purpose.