Unité de Test avec Ninject Instancier
Je suis en train de tester mon service à l'aide de ninject et un projet de tests unitaires avec visual studio 2012. Mon injecter fonctionne bien sur mon contrôleurs, mais quand j'essaie de faire la même chose dans l'unité de la classe de test, je reçois un Exception
.
System.NullReferenceException: Object reference not set to an instance of an object.
namespace Trex.UnitTests
{
[TestClass]
public class GiftServiceTests
{
private IGiftService _giftService;
public void GiftServiceTest(IGiftService giftService)
{
_giftService = giftService;
}
[TestMethod]
public void AddGift()
{
var list = _gift.FindAll(); <--- this line throw an exception
}
}
}
Je pense qu'il ya quelque chose de mal avec l'injection, mais je n'ai pas l'obtenir.
OriginalL'auteur Overmachine | 2013-01-08
Vous devez vous connecter pour publier un commentaire.
Il me semble une faute de
_giftService
. En outre, l'attribut[TestInitialize]
doit être utilisé dans votre constructeur.Essayez le code suivant en plaçant le bon service de nom _giftService - que votre code est l'injection de la place:
Edit: Unité de test doit être fait sans Ninject. Il suffit de créer une instance de l'objet sous test et de les injecter une maquette pour chaque dépendance manuellement.
Ici est un échantillon avec
[TestInitialize]
:L'appareil d'essai doit avoir une par défaut constructeur:
OriginalL'auteur EL Yusubov
Le seul moyen d'injection de dépendance est en mesure d'appeler votre constructeur et de le remplir avec un paramètre qui a une valeur si l'injection de dépendance noyau est celui qui instancie la classe.
Dans votre cas, MSTest est l'instanciation de votre classe de test, de sorte Ninject ne pas avoir une chance d'appeler votre constructeur.
Pour être honnête, vous êtes les choses à ce sujet dans le mauvais sens. Vous devrez vous battre MSTest si vous poursuivez cet de plus pour tenter d'obtenir Ninject (ou tout autre DI-cadre) pour instancier vos classes de test.
Je vous recommande d'utiliser "nouveaux" pour instancier la classe sous test (
_giftService = new GiftService();
). Si cette classe a des dépendances dans son constructeur, l'utilisation d'une infrastructure mocking passer dans moqué de version de ces dépendances. De cette façon, vous isolez vos tests unitaires pour que la fonctionnalité de la classe sous test.OriginalL'auteur TylerOhlsen
_gift
estnull
. Votre variable est_giftService
. Vous devriez également utiliser l'[TestInitialize]
de l'attribut de votre constructeur.Pourboire supplémentaire:
Vous ne devriez pas créer de dépendances dans votre unité de test. Ainsi, le
giftService
lequel vous souhaitez utiliser doit être d'une maquette ou d'un tampon.OriginalL'auteur ydd1987