2009-09-03 8 views
5

Czy można kpić z klasy Assembly?Jak mogę kpić z montażu?

Jeśli tak, to z jakich ram i w jaki sposób?

Jeśli nie, w jaki sposób można by pisać testy kodu, który używa Assembly?

+9

Powiedz to "Twoja matka jest chomikiem, a ojciec pachnie eldeberries"? – patros

+0

@patros: zajęło mi trochę czasu, aby zrozumieć ... –

+0

@Martinho Fernandes: Dodano przykład dla Rhino. –

Odpowiedz

9

jest bardzo wydajny. Myślę, że może to zrobić. W przypadku innych fałszywych frameworków, takich jak Moq lub Rhino, musisz użyć innej strategii.

Strategia dla Rhino lub Min:

Na przykład: Używasz Asssembly klasę, aby uzyskać pełną nazwę zespołu.

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

Zgromadzenie klasa pochodzi z interfejsu _Assembly. Dlatego zamiast bezpośrednio używać interfejsu, można wprowadzić interfejs. Wtedy łatwo jest wyśmiać interfejs dla twojego testu.

Zmodyfikowany klasa:

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

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

W swoim badaniu drwicie _Assembly:

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

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

    //Test conditions 
} 
+0

To robi. Czy możesz wyjaśnić, jak to zrobić w "tradycyjnym" modelu (np. Moq lub Rhino)? –

+1

Och, nie wiedziałem o tym "ukrytym" interfejsie "_Assembly". Dzięki. Gdybym to zrobił, nie zadałbym tego pytania. Sądzę, że gdyby Assembly nie zaimplementował tego interfejsu, mógłbym go sam stworzyć ('IAssembly') i napisać wrapper, który go implementuje i używa implementacji' Assembly', czy to prawda? –

+1

@ Martinho: To prawda –