HangfireIO/Hangfire — pull request #199 by sgrassie (2014-09-03 22:30:39+00:00)
Title: Add param to Job ctor to indicate missing method

Starts to resolve #157. It is marked as 'Jump in', so here goes...

```InvocationData``` almost gives us what we need when it throws an ```InvalidOperationException``` on deserialising if the method is null. The actual exception message thrown is almost exactly what should be shown in the Dashboard.

My idea with this PR will be to stop ```Invocation.Deserialize``` from throwing the ```InvalidOperationException``` if the target method is null, and instead add a couple of properties to the job: a boolean property which will indicate the target method is actually missing, and a text property that will contain the text of the ```InvalidOperationException```.

Then in ```JobMethodCallRenderer.Render``` instead of

if (job == null) { return new NonEscapedString("Can not find the target method."); }

it could be replaced with

if (job.MethodMissing) { return new NonEscapedString(String.Format("{0}"), job.MissingMethodError); }

# TODO
- [x] Add ```bool methodMissing``` to internal ```Job``` ctor, and associated public property
- [x] Fix tests
- [ ] Change ```JobFacts.Ctor_ThrowsAnException_WhenTheTypeDoesNotContainTheGivenMethod``` to be assert that the ctor will not in fact thrown an exception.
- [ ] Add additional unit tests to ```JobFacts``` to assert that the missing method error information is as expected.
- [ ] Add ```MissingMethodError``` property to ```Job```
- [ ] Change the behaviour in ```Invocation.Deserialize``` to populate the ```MissingMethodError```.
- [ ] Change ```JobMethodCallRenderer.Render``` as detailed above.