PageRenderTime 35ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 0ms

/src/Ninject.Tests/Unit/MethodInjectionStrategyTests.cs

https://github.com/developingchris/ninject
C# | 111 lines | 93 code | 18 blank | 0 comment | 0 complexity | 8663dc3017201044ba32cbc0f4867c7c MD5 | raw file
  1. using System;
  2. using System.Linq;
  3. using System.Reflection;
  4. using Moq;
  5. using Ninject.Activation;
  6. using Ninject.Activation.Strategies;
  7. using Ninject.Injection;
  8. using Ninject.Planning;
  9. using Ninject.Planning.Directives;
  10. using Ninject.Planning.Targets;
  11. using Ninject.Tests.Fakes;
  12. using Xunit;
  13. using Xunit.Should;
  14. namespace Ninject.Tests.Unit.MethodInjectionStrategyTests
  15. {
  16. public class MethodInjectionStrategyContext
  17. {
  18. protected readonly MethodInjectionStrategy strategy;
  19. public MethodInjectionStrategyContext()
  20. {
  21. strategy = new MethodInjectionStrategy();
  22. }
  23. }
  24. public class WhenActivateIsCalled : MethodInjectionStrategyContext
  25. {
  26. protected Dummy instance = new Dummy();
  27. protected InstanceReference reference;
  28. protected MethodInfo method1 = typeof(Dummy).GetMethod("Foo");
  29. protected MethodInfo method2 = typeof(Dummy).GetMethod("Bar");
  30. protected Mock<IContext> contextMock;
  31. protected Mock<IPlan> planMock;
  32. protected FakeMethodInjectionDirective[] directives;
  33. protected MethodInjector injector1;
  34. protected MethodInjector injector2;
  35. protected bool injector1WasCalled;
  36. protected bool injector2WasCalled;
  37. public WhenActivateIsCalled()
  38. {
  39. reference = new InstanceReference { Instance = instance };
  40. contextMock = new Mock<IContext>();
  41. planMock = new Mock<IPlan>();
  42. injector1 = (x, args) => { injector1WasCalled = true; };
  43. injector2 = (x, args) => { injector2WasCalled = true; };
  44. directives = new[]
  45. {
  46. new FakeMethodInjectionDirective(method1, injector1),
  47. new FakeMethodInjectionDirective(method2, injector2)
  48. };
  49. contextMock.SetupGet(x => x.Plan).Returns(planMock.Object);
  50. planMock.Setup(x => x.GetAll<MethodInjectionDirective>()).Returns(directives);
  51. }
  52. [Fact]
  53. public void ReadsMethodInjectorsFromPlan()
  54. {
  55. strategy.Activate(contextMock.Object, reference);
  56. planMock.Verify(x => x.GetAll<MethodInjectionDirective>());
  57. }
  58. [Fact]
  59. public void CreatesMethodInjectorsForEachDirective()
  60. {
  61. strategy.Activate(contextMock.Object, reference);
  62. }
  63. [Fact]
  64. public void ResolvesValuesForEachTargetOfEachDirective()
  65. {
  66. strategy.Activate(contextMock.Object, reference);
  67. directives.Map(d => d.TargetMocks.Map(m => m.Verify(x => x.ResolveWithin(contextMock.Object))));
  68. }
  69. [Fact]
  70. public void InvokesInjectorsForEachDirective()
  71. {
  72. strategy.Activate(contextMock.Object, reference);
  73. injector1WasCalled.ShouldBeTrue();
  74. injector2WasCalled.ShouldBeTrue();
  75. }
  76. }
  77. public class FakeMethodInjectionDirective : MethodInjectionDirective
  78. {
  79. public Mock<ITarget>[] TargetMocks { get; private set; }
  80. public FakeMethodInjectionDirective(MethodInfo method, MethodInjector injector)
  81. : base(method, injector) { }
  82. protected override ITarget[] CreateTargetsFromParameters(MethodInfo method)
  83. {
  84. TargetMocks = method.GetParameters().Select(p => new Mock<ITarget>()).ToArray();
  85. return TargetMocks.Select(m => m.Object).ToArray();
  86. }
  87. }
  88. public class Dummy
  89. {
  90. public void Foo(int a, string b) { }
  91. public void Bar(IWeapon weapon) { }
  92. }
  93. }