0

所以问题如下。我正在使用 Rhino Mocks 3.6 对一个类 SampleClass 进行单元测试。对于测试,我使用了 InnerClass 的模拟,因为它在 SampleClass 构造函数中使用。InnerClass 有一个名为 TheMethod(ref string s1,ref string s2) 的方法。这是问题开始的地方。TheMethod(ref string,ref string) 对参数没有做任何事情,我希望 TheMethod 实际修改其中一个字符串 (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 没有改变,出于测试原因,我希望 TestMethod() 修改 s1 的值而不改变 TheMethod() 本身的主体

[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

假设您的内部类看起来像这样(注意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 回答