0

というわけで問題は以下の通り。Rhino Mocks 3.6 を使用してクラス SampleClass の単体テストを行っています。テストでは、SampleClass コンストラクターで使用される InnerClass のモックを使用します。InnerClass には TheMethod(ref string s1,ref string s2) というメソッドがあります。ここから問題が始まります。TheMethod(ref string,ref string) はパラメータで何もしていないので、TheMethod に文字列の 1 つ (s1) を実際に変更させたいと思います。Rhino Mocks を使用して、そのようなことを行うことは可能ですか? もしそうなら、どうやって?いつ呼び出されましたか? Do() ハンドラ? 私は無知です。ここに疑似コードがあります

Class SampleClass
{
Public String SampleClassMethod()
{
  string s1 = string.Empty;
  string s2 = string.Empty;
  string s_final = this.InnerClass.TheMethod(ref s1, ref s2); //TheMethod() which is doing 
                                                   //nothing with the given strings
  if (s_final == "something")
  return s1;
}
}

その結果、s1 は変更されず、テスト上の理由から、TheMethod() 自体の本体を変更せずに TestMethod() で s1 の値を変更したいと考えています。

[TestMethod]
public void TestMethod1()
{
//generating mocks
//SampleClass target; //tested class object

Expect.Call(InnerClassMock.TheMethod(
            ref Arg<string>.Ref(Rhino.Mocks.Constraints.Is.Equal(s1), string1).Dummy,
            ref Arg<string>.Ref(Rhino.Mocks.Constraints.Is.Equal(s1), string1).Dummy)).IgnoreArguments();


        string temp = target.SampleClassMethod();
        Assert.AreEqual("1234", temp);
}
4

1 に答える 1

0

内部クラスが次のようになっていると仮定します ( virtualであることに注意してくださいTheMethod)。

public class SomeClass
{
    public virtual string TheMethod(ref string s1, ref string s2)
    {
        s1 = "X";
        s2 = "Y";

        return "Z";
    }
}

Rhino.Mock の「OutRef」オプションを使用して、ref 引数の出力を定義できます。

var mock = MockRepository.GenerateStub<SomeClass>();
string temp1 = "", temp2 = "";
mock.Stub(m => m.TheMethod(ref temp1, ref temp2)).OutRef("AAA", "BBB").Return("DEF");

var my1 = "";
var my2 = "";
var result = mock.TheMethod(ref my1, ref my2);

このコードを実行my1すると、「AAA」、my2「BBB」、result「DEF」になります。

于 2013-07-19T00:41:30.903 に答える