-
Notifications
You must be signed in to change notification settings - Fork 152
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Implement Pluggable agents #909
Comments
Your proposal does sound 'cleaner' and looks like it simplifies supporting different runners without the complexity that we have now. I think that as you say, we'll need to see what the code tells us. I'd be interested in where this goes, but I will leave it up to @ChrisMaddock. |
I originally thought of using the GUI engine as a base for the spike. On reflection, that would be easy initially but would create more work at the end as everything would then have to be recreated in the NUnit engine.
The spike was completed and the dev-4.0 branch is no longer used. This list now reflects changes being made to main
|
I have nothing to add, all this sounds great to me! |
See plan update above |
The spike having been completed, we are now in the process of working toward an actual 4.0 release. I'm renaming this to cover actual implementation of the feature. |
@ChrisMaddock @mikkelbu @rprouse @jnm2
I'm calling this a question, but I mean it as a question we are asking ourselves.
Here's a rough outline of what I want to try with some spike code. Some of this is new ground so it would be nice to have all our brains on it.
FIRST, here's how things generally work. Except as noted, they are the same in both the current NUnit engine and the testcentric fork. Also, for clarity, I've simplified things a lot here.
MasterTestRunner
.MasterTestRunner
uses various services to fill in the appropriate internal runner (ITestEngineRunner
).ITestRunner
is one of the in-process runners, it finds a driver (IFrameworkDriver
) that knows how to run the tests. On platforms that supportAppDomains
, it creates one in which to run the test.ProcessRunner
, things work differently.ProcessRunner
uses theTestAgency
service to get an agent. Although we usually just call them "agents", think of them as "process proxy agents" for this discussion, because the serve as an in-process proxy for the runner executing in a separate process.TestAgency
launches that process and waits for it to establish communication. Once it does it returns the proxy to theProcessRunner
.ProcessRunner
issues commands to the remote runner and the remote runner goes through steps 1 to 3 itself.The current GUI engine deviates from the above by
Because the GUI engine has already taken those steps toward generalized agents, I'm using that engine for my spike.UPDATE: See further comment on selection of a base for the spike.
SECOND, here's how I'd like to see agents work...
MasterTestRunner
as we now do.MasterTestRunner
will acquire an agent. A new service will be needed, which knows what agents are available and can decide which ones to use based on settings in the package.TestAgency
will either disappear or be seriously restricted in what it does. The process management functionality will move into the particular agent type, for example.FINALLY, if we decide that the spike answers the question in the title positively, I'll define a set of steps - independent PRs - to get it into the 4.0 release.
The text was updated successfully, but these errors were encountered: