J'ai du mal à enregistrer mes types pour Unity 2 dans mes tests unitaires.Tests unitaires d'unité - types d'enregistrement
Voici un extrait de la classe en cours de test:
public class SomeService : ISomeService
{
private int SomeVar { get; set; }
[Dependency]
public ISessionManager SessionManager { get; set; }
public SomeService()
{
SomeVar = SessionManager.Get<int>("SomeVar");
}
}
Voici ce que j'ai dans ma méthode MSTest ClassInitialize:
private static ISomeService _someService;
private static IUnityContainer _unityContainer;
[ClassInitialize]
public static void MyClassInitialize(TestContext testContext)
{
var mockSessionManager = new Mock<ISessionManager>();
mockSessionManager.Setup(foo => foo.Get<int>(It.IsAny<string>())).Returns(1);
_unityContainer = new UnityContainer()
.RegisterInstance(mockSessionManager.Object)
.RegisterType<ISomeService, SomeService>(
new InjectionProperty("SessionManager"));
_someService = _unityContainer.Resolve<IAdditionalCoveragesService>();
}
Pour chaque méthode d'essai que j'ai, quand je debug et l'étape Dans le constructeur de SomeService, il est dit que SessionManager est null. Qu'est-ce que je fais de mal à essayer d'enregistrer mes types dans Unity?
Remarque - J'utilise Moq pour configurer un gestionnaire de session fictif qui doit être injecté dans SomeService.
Merci !!!
droit, mais je préfère ne pas avoir à créer un nouveau constructeur pour définir le SessionManager. Est-il impossible d'injecter la propriété avant le constructeur? –
Comment définir une propriété avant qu'un objet existe? Si vous ne voulez pas ajouter un constructeur, vous pouvez mettre votre logique dans le setter de SessionManager – onof
Oui, votre SessionManager sera toujours nul dans le constructeur, la période, le conteneur DI ou non. Les propriétés ne fonctionnent pas de cette façon. –