2009-09-03 12 views
5

È possibile prendere in giro la classe Assembly?Come posso prendere in giro Assemblare?

Se sì, utilizzando quale struttura e in che modo?

In caso contrario, come si farebbe a scrivere test per il codice che utilizza Assembly?

+9

raccontarla "tua madre è un criceto, e tuo padre puzza di eldeberries"? – patros

+0

@patros: mi ci è voluto un po 'per capire ... –

+0

@ Martin Fernandes: Aggiunto un esempio per Rhino. –

risposta

9

TypeMock è molto potente. Immagino che possa farlo. Per gli altri framework mock come Moq o Rhino, dovrai usare un'altra strategia.

strategia per Rhino o Moq:

Per esempio: Si utilizza la Asssembly classe per ottenere il nome completo di montaggio.

public class YourClass 
{ 
    public string GetFullName() 
    { 
     Assembly ass = Assembly.GetExecutingAssembly(); 
     return ass.FullName; 
    } 
} 

Il Assemblea classe derivata dall'interfaccia _Assembly. Quindi, invece di utilizzare Assembly direttamente, è possibile iniettare l'interfaccia. Quindi, è facile prendere in giro l'interfaccia per il test.

La classe modificata:

public class YourClass 
{ 
    private _Assembly _assbl; 
    public YourClass(_Assembly assbl) 
    { 
     _assbl = assbl; 
    } 

    public string GetFullName() 
    { 
     return _assbl.FullName; 
    } 
} 

nel test, si deridono _Assembly:

public void TestDoSomething() 
{ 
    var assbl = MockRepository.GenerateStub<_Assembly>(); 

    YourClass yc = new YourClass(assbl); 
    string fullName = yc.GetFullName(); 

    //Test conditions 
} 
+0

Lo fa. Puoi spiegare come lo farei in un quadro di simulazione "tradizionale" (come Moq o Rhino)? –

+1

Oh, non sapevo di questa interfaccia "nascosta" '_Assembly'. Grazie. Se l'avessi fatto, non avrei fatto la domanda. Immagino che se Assembly non implementasse questa interfaccia, avrei potuto crearne uno io stesso ('IAssembly') e scrivere un wrapper che lo implementasse e utilizzasse l'implementazione' Assembly', è corretto? –

+1

@ Martinho: corretto –

Problemi correlati