2010-01-25 3 views
0

J'ai une méthode que je veux tester qui frappe la base de données. D'après ce que j'ai lu c'est une opportunité parfaite d'utiliser un simulacre. Cependant, le problème que je suis confronté est que je passe l'objet une chaîne, puis il crée un objet et frappe la DB avec cet objet-à-diremocking rhino se moque d'un appel

public void test(string t) 
{ 
    Test t1 = new Test(t); 
    db.Save(t1); 
} 

Puis le dans le test que j'ai:

using(mockery.Record) 
{ 
    Expect.Call(db.Save(???)) 
} 

Le problème étant - qu'est-ce que je m'attends ici? Un appel à:

Expect.call(db.Save(new Test(t)) 

ne fonctionne pas.

Comme je suis nouveau à moquer cela peut être une question facile, mais toute aide sera très appréciée.

grâce

+0

BTW Je suis avec moquaient ITest = mockery.StrictMock (); J'ai d'autres mocks pour travailler avec succès, mais pas celui-là – smauel

Répondre

0

Eh bien vous passez souvent l'instance réelle que vous attendez plus tard. Par exemple:

public void test(string t) 
{ 
    Test t1 = new Test(t); 
    using(mockery.Record) 
    { 
     Expect.Call(db.Save(t1)); 
    } 
    using(mockery.Playback() 
    {  
     db.Save(t1); 
    } 
    mockery.VerifyAll(); 
} 

Mais c'est peut-être pour limiter. Vous pouvez alors définir des critères que l'argument doit remplir. Par exemple:

using(mockery.Record) 
{ 
    Test instanceToCompare = new Test(t);  
    Expect.Call(db.Save(Arg<Test>.Is.Equal(instanceToCompare))); 
} 

Ou un autre exemple:

using(mockery.Record) 
{ 
    Expect.Call(db.Save(Arg<Test>.Matches(t=>t.Name.Length.Equals("Test"))));   
} 
Questions connexes