2016-09-07 7 views
1

誰かが私を助けてくれることを願っています。MOQのRefキーワードに関する問題

私は別のメソッド(内部メソッド)を呼び出すクラスを依存として持つメソッド(外部メソッド)をテストしようとしています。この内部メソッドは、参照パラメータとしてブール値をとります。私の問題は、これまでこのBoolean参照パラメータを制御できなかったことです。

(注 - 下に示すコードは、問題を説明するために書かれたものであり、実際のコードとは異なります)。

ここからのMOQドキュメント - https://github.com/Moq/moq4/wiki/Quickstart は、Ref/Out parmsを扱う際の概要を示していますが、それは有用ではありません。

私は(私はここにいた - Assigning out/ref parameters in Moq)作品例を試してみました

public interface IService 
{ 
    void DoSomething(out string a); 
} 

[Test] 
public void Test() 
{ 
    var service = new Mock<IService>(); 
    var expectedValue = "value"; 
    service.Setup(s => s.DoSomething(out expectedValue)); 

    string actualValue; 
    service.Object.DoSomething(out actualValue); 
    Assert.AreEqual(actualValue, expectedValue); 
} 

しかし、私は実際に私はそれを動作させることはできません実行したいコードをしようとしたとき。 これは以下に含まれています。

Iが望むコードが

Public Class ClassToBeTested 

    Dim isProblem As Boolean 

    Public Function PassComparisonValues(m_GetValueGetter As IGetValue) As Boolean 

     Dim dPBar As Single = m_GetValueGetter.GetValue(isProblem) 

     Return isProblem 
    End Function 
End Class 

私は、これは以下でテストするために書かれたコードをテストする

Public Interface IGetValue 
    Function GetValue(ByRef myBoolOfInterest As Boolean) As Single 
End Interface 

インタフェース(注 - これは、別のプロジェクトです)。私が欲しいもの

public void MethodToTest() 
{ 
    // Arrange 
    // System Under Test 
    ClassToBeTested myClassToBeTested = new ClassToBeTested(); 

    // Construct required Mock 
    Mock<IGetValue> myMock = new Mock<IGetValue>(); 
    bool isProblem = true; 
    myMock.Setup(t => t.GetValue(ref isProblem)); 

    // Act 
    isProblem = myClassToBeTested.PassComparisonValues(myMock.Object); 

    // Assert 
    Assert.That(isProblem, Is.EqualTo(true)); 
} 

はClassToBeTestedにisProblemの内容を制御できるようにすることである、と私はこれが起こっていないことを発見しています。 私は何をしていても偽を含んでいます。

誰かが助けてくれることを願っています。

+0

私は図書館の著者に質問します。 – Max

答えて

0

あなたができることはClassToBeTestedisProblemを保護することです。ユニットテストの場合はClassToBeTestedから継承し、isProblemの値を期待値に設定します。

class ClassToBeTested 
{ 
    protected bool isProblem; 
    // code here ... 
} 

class TestableClassToBeTested 
    : ClassToBeTested 
{ 
    public TestableClassToBeTested(bool isPRoblemValue) 
    { 
     isProblem = isPRoblemValue; 
    } 
} 

public void MethodToTest() 
{ 
    // Arrange 
    // System Under Test 
    bool isProblem = true; 
    ClassToBeTested myClassToBeTested = new TestableClassToBeTested(isProblem); 

    // code here ... 
} 
関連する問題