2009-08-17 12 views
27

derisione una classe concreta con Rhino Mocks sembra funzionare abbastanza facile quando si ha un costruttore vuoto su una classe:Utilizzando RhinoMocks, come si fa a schernire o stubare una classe concreta senza un costruttore vuoto?

public class MyClass{ 
    public MyClass() {} 
} 

Ma se aggiungo un costruttore che prende parametri e togliere quello che non prende parametri :

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

tendo ad ottenere un'eccezione:

System.MissingMethodException: Impossibile trovare un costruttore con corrispondenti argomenti

Ho provato a mettere in valori nulli nella mia chiamata di deridere o Stub, ma non funziona.

Posso creare schernisce e mozziconi di classi concrete che mancano i costruttori dei parametri-meno?

risposta

31

Sì. Basta passare i parametri nel vostro StrictMock() chiamata:

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

e la sicurezza in fase di compilazione esce dalla finestra – Maslow

1

Devi passare loro in dopo la vostra DynamicMock<T> dichiarazione, che prende una matrice di parametri come argomento. Sfortunatamente non ci sono controlli di tipo su di esso, ma chiamerà il costruttore appropriato se si abbinano i tuoi argomenti alla firma.

Ad esempio:

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

Se deridere una classe concreta senza un costruttore vuoto/default, quindi Rhino Mocks sta per dover usare qualsiasi altro costruttori sono disponibili. Rhino avrà bisogno che tu fornisca i parametri per tutti i costruttori non vuoti in quanto non avrà alcuna idea su come costruirli altrimenti.

L'errore è che stavo tentando di passare null alla chiamata CreateMock o GenerateMock, non appena ho generato un parametro non null per il costruttore, le chiamate per creare il mock o lo stub hanno iniziato a funzionare.