2017-04-12 1 views
2

je besoin d'aide à l'utilisation de la liaison contextuelle avec ninject J'ai quelque chose comme ceci:TDD conteneur cio ninject liant contextuelle

public interface ISound 
{ 
    String Sound(); 
} 

public class Cat : Animal 
{ 
    private string category; 
    private ISound sound; 

    public Cat(ISound sound, int age, string name, string sex, string category) 
     : base(age, name, sex) 
    { 
     this.sound = sound; 
     this.category = category; 
    } 


public class CatSound : ISound 
{ 
    public String Sound() 
    { 
     return "Meow"; 
    } 
} 

et exactement le même chien son qui implemets son et mon bindingmodule:

public class BindingModule:NinjectModule 
{ 
    private readonly SelectorMode _typeofsound; 

    public new StandardKernel Kernel => ServiceLocator.Kernel; 

    public BindingModule(SelectorMode mode) 
    { 
     _typeofsound = mode; 
    } 


    public override void Load() 
    { 
     if (_typeofsound == SelectorMode.Dog) 
     { 
      Kernel.Bind<ISound>().To<DogSound>(); 
     } 
     else if(_typeofsound==SelectorMode.Cat) 
     { 
      Kernel.Bind<ISound>().To<CatSound>(); 
     } 
     else 
     { 
      Kernel.Bind<ISound>().To<HorseSound>(); 
     } 


    } 

    public class SelectorMode 
    { 
     public static SelectorMode Cat; 
     public static SelectorMode Horse; 
     public static SelectorMode Dog; 


    } 
} 

et le test que je suis en train de courir

public class WhenBindingCat:GivenABindingModule 
     { 
      [TestMethod] 
      public void SouldBindItToCat() 
      { 
       // var kernel=new Ninject.StandardKernel(new ) 
       var sut = new BindingModule(SelectorMode.Cat); 

       sut.Load(); 



      } 

et ne sais pas comment je dois affirmer ici

Répondre

1

Essayez quelque chose comme ceci:

 [TestMethod] 
     public void SouldBindItToCat() 
     { 
      var sut = new BindingModule(SelectorMode.Cat); 
      IKernel kernel = new StandardKernel(sut); 

      Assert.IsTrue(kernel.Get<ISound>() is Cat); 
     } 

et

remplacer classe SelectorMode par ENUM

public enum SelectorMode 
{ 
    Cat, Horse, Dog 
} 
+0

Dans cet exemple, cela ressemble comme la meilleure façon de le faire. Une autre approche pourrait être de créer une interface autour du noyau et de se moquer de lui. De cette façon, on peut affirmer que la liaison correcte du noyau a été appelée. –

+0

le test a échoué, il est de type DogSound, vous pensez qu'il pourrait être un problème dans mon SelectorMode? –

+0

Vous avez probablement encore des tests qui outrepasse Bind – gabba