2017-06-21 4 views
0

Donc, j'ai un problème en se moquant d'une méthode privée. De tout ce que j'ai vu, cela devrait marcher, mais ce n'est pas le cas.Problème en se moquant d'une méthode privée

Commençons par les bases - Voici le code sous test

public sealed class UnderTest 
{ 
    private bool MockPrivate(string name) 
    { 
     [snip] 
    } 

    private string MethodUnderTest(ParameterHolder parameters) 
    { 
     if (!this.MockPrivate(parameters.Parameter2)) 
     { 
      return null; 
     } 
     [Snip] 
    } 
    [Snip] 
} 

public sealed class ParameterHolder 
{ 
    public ParameterHolder (bool parameter1, string parameter2) 
    { 
     this.Parameter1 = parameter1; 
     this.Parameter2 = parameter2; 
    } 

    public bool Parameter1 
    { 
     get; 
     private set; 
    } 

    public string Parameter2 
{ 
     get; 
     private set; 
    } 
} 

Voici la méthode d'essai

public void Test_UnderTest_MethodUnderTest() 
{ 
    UnderTest testClass; 
    ParameterHolder parameters; 
    dynamic h; 

    testClass = new UnderTest(); 

    parameters = Isolate.Fake.Instance<ParameterHolder>(Members.CallOriginal); 
    Isolate.WhenCalled(() => parameters.Parameter1).WillReturn(true); 
    Isolate.WhenCalled(() => parameters.Parameter2).WillReturn("parameter2value"); 

    h = testClass.AsDynamic(); 

    Isolate.WhenCalled(() => h.MockPrivate((string)null)).WillReturn(true); 

    Assert.IsNotNull(h.MethodUnderTest(parameters)); 
} 

J'ai aussi essayé de changer l'appel isolat:

Isolate.WhenCalled(() => h.MockPrivate("parameter2value").WillReturn(true); 

et

Isolate.WhenCalled(() => h.MockPrivate(parameters.Parameter2).WillReturn(true); 

Dans tous les cas, la méthode MockPrivate est exécutée au lieu de renvoyer la valeur True mocked.

Toute aide serait appréciée.

Répondre

3

Ok, a fait des vérifications supplémentaires et c'est la bonne façon:

Isolate.NonPublic.WhenCalled(testClass, "MockPrivate").WillReturn(true);