2009-12-17 7 views
0

Dans RhinoMocks ou Moq, les propriétés d'un objet peuvent-elles être définies avant l'appel du constructeur?Mocking - définition d'une propriété avant d'appeler le constructeur

J'essaie de tester une méthode.

La classe contenant la méthode a du code dans son constructeur qui dépend de la définition de certains membres, malheureusement il n'y a pas de paramètres dans le constructeur pour les définir, donc je dois les définir via une propriété. Est-il possible de définir cette propriété avant d'appeler le constructeur dans RhinoMocks ou Moq?

+1

Un exemple de code pourrait aider à clarifier cette question. Je ne comprends pas comment votre constructeur peut dépendre des propriétés. Parlez-vous du constructeur de votre objet sous test, ou du constructeur de la classe que vous essayez de simuler? –

Répondre

7

Comment cela fonctionnerait-il? Définir une propriété sur un objet qui n'existe pas encore? Je pense que vous devriez reconnaître que quelque chose ne va pas dans la conception de votre classe et essayer de le changer pour qu'il devienne plus testable, par exemple en utilisant dependency injection.

1

Cela semble étrange: klausbyskov est probablement juste en ce qu'il y a un problème de conception ici.

Ces membres sont définis directement dans le code? Par exemple

protected string myField = "this and that"; 

public MyClass() 
{ 
    if (myField == "this and that") { DoSomething(); } 
} 

Si tel est le cas, alors la seule façon possible de modifier ces membres est une sous-classe si les remplace par exemple le constructeur

public SubClass() 
{ 
    myField = "something else"; 
} 

garantira que SubClass() a le champ initialisé à "quelque chose d'autre". Cependant, cela va exécuter après le constructeur de MyClass(). J'examinerai soigneusement le besoin de toute logique dans votre constructeur. En général, c'est une mauvaise idée. Si vous devez créer des membres de manière conditionnelle dans un objet, considérez le Factory pattern à la place.

Questions connexes