2009-08-17 5 views
27

Mocking une classe concrète avec Rhino Mocks semble fonctionner assez facile quand vous avez un constructeur vide sur une classe:En utilisant RhinoMocks, comment simulez-vous ou stub une classe concrète sans un constructeur vide?

public class MyClass{ 
    public MyClass() {} 
} 

Mais si j'ajoute un constructeur qui prend des paramètres et supprimer celui qui ne prend pas de paramètres :

public class MyClass{ 
    public MyClass(MyOtherClass instance) {} 
} 

J'ai tendance à faire une exception:

System.MissingMethodException: Impossible trouver un constructeur avec des arguments correspondant

J'ai essayé de mettre en nulls dans mon appel à raillent ou Stub, mais il ne fonctionne pas. Puis-je créer des mock et des stubs de classes concrètes qui manquent de constructeurs sans paramètres?

Répondre

31

Oui. Il suffit de passer dans les paramètres de votre appel StrictMock():

// New FruitBasket that can hold 50 fruits. 
MockRepository mocks = new MockRepository(); 
FruitBasket basket = mocks.StrictMock<FruitBasket>(50); 
+0

et la sécurité à la compilation passe par la fenêtre – Maslow

1

Vous devez les transmettre après votre déclaration DynamicMock<T>, qui prend un tableau de paramètres comme argument. Malheureusement, il n'y a pas de vérification de type, mais il appellera le constructeur approprié si vous faites correspondre vos arguments à la signature.

Par exemple:

var myMock = MockRepository.DynamicMock<MyClassWithVirtuals>(int x, myObj y); 
3

Si vous Mock une classe concrète sans un constructeur vide/défaut, Rhino Mocks va devoir utiliser tout autre constructeurs sont disponibles. Rhino va avoir besoin de vous pour fournir les paramètres pour tous les constructeurs non vides car il n'aura aucune idée de la façon de les construire autrement. Mon erreur est que j'essayais de passer des zéros à l'appel CreateMock ou GenerateMock, dès que j'ai généré un paramètre non nul pour le constructeur, les appels pour créer le mock ou le stub ont commencé à fonctionner.

Questions connexes