2010-12-08 2 views
2

J'ai une méthode comme ceci:NMock - Comment faire qu'une méthode avec les mêmes types d'arguments renvoie des valeurs différentes?

public string MyMethod(string a, string b) 
{ 
    if(a == "abcd" && b == "xyz") 
    return "good"; 

    if(a == "xyz" && b == "something") 
     return "even better"; 

    return "unexpected"; 
} 

    public string MainMethod() 
    { 
    string s1, s2; 
    if(some condition) 
    { 
     s1= "abcd"; 
     s2 = "xyz"; 
    } 

    return service.MyMethod(s1, s2); 

    } 

Mon objet fantaisie est créé comme celui-ci

AppObj obj = new AppObj(); 

    Mockery mocks = new Mockery(); 
    mockMyService = mocks.NewMock<IMyService>(); 
    Expect.Once.On(mockMyService).Method("MyMethod"). 
       With("abcd", "xyz"). 
       Will(Return.Value("good")); 

    obj.MainMethod(); 
    Expect.Once.On(mockMyService).Method("MyMethod"). 
       With("xyz", "something"). 
       Will(Return.Value("even better")); 
    obj.MainMethod(); 

Le problème avec le code ci-dessus est, il faut toujours les paramètres et les rendements de la première méthode simulée " bien". Que dois-je faire pour que NMock renvoie des valeurs différentes pour une même méthode avec des valeurs d'arguments différentes? S'il vous plaît aider !!

Répondre

6

J'ai compris!

Besoin d'utiliser mock.Ordered.

Toutes les méthodes de simulation sont appelées de manière non ordonnée. Pour le faire commander, il faut utiliser:

Using(mock.Ordered) 
{ 
    MyMethod1(arg1, arg2); 
    MyMethod2(arg2, arg1); 
} 

C'est-à-dire !! :)

Questions connexes