PageRenderTime 51ms CodeModel.GetById 23ms RepoModel.GetById 1ms app.codeStats 0ms

/src/Ninject.Tests/Unit/DynamicMethodInjectorFactoryTests.cs

https://github.com/developingchris/ninject
C# | 123 lines | 102 code | 21 blank | 0 comment | 0 complexity | 66a648ee3d6db0c343d953398d08f619 MD5 | raw file
  1. using System;
  2. using System.Reflection;
  3. using Ninject.Injection;
  4. using Ninject.Tests.Fakes;
  5. using Xunit;
  6. using Xunit.Should;
  7. namespace Ninject.Tests.Unit.DynamicMethodInjectorFactoryTests
  8. {
  9. public class DynamicMethodInjectorFactoryContext
  10. {
  11. protected DynamicMethodInjectorFactory injectorFactory;
  12. public DynamicMethodInjectorFactoryContext()
  13. {
  14. injectorFactory = new DynamicMethodInjectorFactory();
  15. injectorFactory.Settings = new NinjectSettings();
  16. }
  17. }
  18. public class WhenConstructorInjectorIsInvoked : DynamicMethodInjectorFactoryContext
  19. {
  20. protected ConstructorInfo constructor;
  21. protected ConstructorInjector injector;
  22. public WhenConstructorInjectorIsInvoked()
  23. {
  24. constructor = typeof(Samurai).GetConstructor(new[] { typeof(IWeapon) });
  25. injector = injectorFactory.Create(constructor);
  26. }
  27. [Fact]
  28. public void CallsConstructor()
  29. {
  30. var sword = new Sword();
  31. var samurai = injector.Invoke(new[] { sword }) as Samurai;
  32. samurai.ShouldNotBeNull();
  33. samurai.Weapon.ShouldBeSameAs(sword);
  34. }
  35. [Fact]
  36. public void CallsConstructorWithNullArgumentIfOneIsSpecified()
  37. {
  38. var samurai = injector.Invoke(new[] { (IWeapon)null }) as Samurai;
  39. samurai.ShouldNotBeNull();
  40. samurai.Weapon.ShouldBeNull();
  41. }
  42. }
  43. public class WhenPropertyInjectorIsInvoked : DynamicMethodInjectorFactoryContext
  44. {
  45. protected PropertyInfo property;
  46. protected PropertyInjector injector;
  47. public WhenPropertyInjectorIsInvoked()
  48. {
  49. property = typeof(Samurai).GetProperty("Weapon");
  50. injector = injectorFactory.Create(property);
  51. }
  52. [Fact]
  53. public void SetsPropertyValue()
  54. {
  55. var samurai = new Samurai(null);
  56. var sword = new Sword();
  57. injector.Invoke(samurai, sword);
  58. samurai.Weapon.ShouldBeSameAs(sword);
  59. }
  60. [Fact]
  61. public void SetsPropertyValueToNullIfInvokedWithNullArgument()
  62. {
  63. var samurai = new Samurai(new Sword());
  64. injector.Invoke(samurai, null);
  65. samurai.Weapon.ShouldBeNull();
  66. }
  67. }
  68. public class WhenMethodInjectorIsInvokedOnVoidMethod : DynamicMethodInjectorFactoryContext
  69. {
  70. protected MethodInfo method;
  71. protected MethodInjector injector;
  72. public WhenMethodInjectorIsInvokedOnVoidMethod()
  73. {
  74. method = typeof(Samurai).GetMethod("SetName");
  75. injector = injectorFactory.Create(method);
  76. }
  77. [Fact]
  78. public void CallsMethod()
  79. {
  80. var samurai = new Samurai(new Sword());
  81. injector.Invoke(samurai, new[] { "Bob" });
  82. samurai.Name.ShouldBe("Bob");
  83. }
  84. }
  85. public class WhenMethodInjectorIsInvokedOnNonVoidMethod : DynamicMethodInjectorFactoryContext
  86. {
  87. protected MethodInfo method;
  88. protected MethodInjector injector;
  89. public WhenMethodInjectorIsInvokedOnNonVoidMethod()
  90. {
  91. method = typeof(Samurai).GetMethod("Attack");
  92. injector = injectorFactory.Create(method);
  93. }
  94. [Fact]
  95. public void CallsMethod()
  96. {
  97. var samurai = new Samurai(new Sword());
  98. injector.Invoke(samurai, new[] { "evildoer" });
  99. samurai.IsBattleHardened.ShouldBeTrue();
  100. }
  101. }
  102. }