What is the difference between the three different types of custom plugins that Specflow supports? I am making a generator plugin for CodedUI right now and this question crosses my mind over and over and the documentation is either vague or incomplete so I thought I would ask the community here if they could give me a definitive, concrete explanation of the differences between runtime, generator, and runtime/generator plugins. What do they do and how do they alter the functionality of Specflow when a plugin is added?
As useful as it is to know how to code them, I would like to know the theory behind what I am working with too and the documentation is rather silent on that front.
SpecFlow currently works in a way that it converts your features file to a .NET (C#/VB) test classes during design or compile-time. These generated classes are located in the MyStuff.feature.cs files.
Once you run the tests (the SpecFlow scenarios) from the generated files they use the SpecFlow runtime to find the step definitions, hooks and everything you need to provide the automation for the scenario steps.
Generator plugins can influence the design or compile-time code generation (e.g. you can generate a special attribute to the test method). Runtime plugins can influence the execution of the tests (e.g. add special logging). A runtime/generator is just a plugin that changes both.
As the generator plugins are loaded and executed design or compile-time, you have to make sure that all of the plugin dependencies are available. E.g. you cannot have a reference to one of the projects from your app, because those are likely to be unfinished at the time when the generator has to be executed already.