2017-06-21 17 views
0

プライベートメソッドを嘲笑することに問題があります。私が見たすべてから、それはうまくいくはずですが、そうではありません。プライベートメソッドを嘲笑する問題

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

のは、基本から始めましょうここでのテストここで

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; 
    } 
} 

下のコードがあることは私もに分離株の呼び出しを変更しようとした試験方法

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)); 
} 

です

および

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

すべての場合、模擬True値を返すのではなく、MockPrivateメソッドが実行されます。

ご協力いただければ幸いです。

答えて

3

[OK]を、いくつかのより多くの検査を行なったし、これが正しい方法です:

Isolate.NonPublic.WhenCalled(testClass, "MockPrivate").WillReturn(true); 
関連する問題