Rhino Mock - Stubbed方法总是返回null

时间:2015-07-07 12:11:19

标签: c# asp.net-mvc nunit rhino-mocks rhino-mocks-3.5

我一直在试图弄清楚我正在编写的这个特定测试发生了什么,现在再次联系,看看是否有人可能知道发生了什么。

我有一个ModeltoXml方法,当我直接通过另一个测试类测试时,它很好。但是在我测试的另一个方法是调用ModeltoXml,我在Rhino Mock中创建的存根总是返回null。

下面大致是我的代码如何查找通过构造函数传递我的存根方法的测试。

[Test]

   var newEntry = new Model1{name="test"};
       var referrer = "http://example.com";

       var stubbedConfigMan = MockRepository.GenerateStub<IConfigurationManager>();
       var supportMethods = MockRepository.GenerateStub<ISupportMethods>();
       stubbedConfigMan.Stub(x => x.GetAppSetting("confEntry1")).Return("pathhere");
       supportMethods.Stub(x => x.ModeltoXml(newEntry)).IgnoreArguments().Return("test"); //this is the line of code which should be setting the return value

 var testObject = new MyApi().NewTicket(newEntry, referrer, supportMethods, stubbedConfigMan);

为此测试调用的具体方法有一行如下所示:

 public MyResponseModel NewTicket(Model1 newTicket, string referrer,     ISupportMethods supportMethods,IConfigurationManager configMan)
{
//.. other code here
   var getXml = supportMethods.ModeltoXml(newTicket);  //This line always returns null
}

ModeltoXml方法的简单条目:

public string ModeltoXml<T>(T item)
{
//Code here to serialize response

       return textWriter.ToString();
   }

我的界面上有什么:

public interface ISupportMethods
{
  string ModeltoXml<T>(T item);
}

我创建了另一个基本方法,除了并返回一个字符串值。我在同一个类中工作但是在测试中我必须在存根上使用.IgnoreArguments选项。此后在调试时我看到了设置的返回值。

然而,当我尝试在我的测试类中有问题的代码行上做同样的事情时,我仍然看到在调试期间我的类中没有出现返回值。

所以我有点卡住了!我在我的测试中得到了其他存根的返回值,而这个特殊的方法/存根只是不会打球。

感谢。

更新

上面我发现的一个更简单的例子是在同一个测试中:

       var stubbedConfigMan = MockRepository.GenerateStub<IConfigurationManager>();
       var supportMethods = MockRepository.GenerateStub<ISupportMethods>();

        supportMethods.Stub(x => x.ModeltoXml(newEntry)).IgnoreArguments().Return("test").Repeat.Any();

//the class under test is successfully returning 'hero' when this method is called.
       supportMethods.Stub(x => x.mytest(Arg<string>.Is.Anything)).Return("hero");

//If I use this line and debug test9 is set with my return value of "test".
//However in the same run my class under test the method just returns null.
    var test9 = supportMethods.ModeltoXml(newEntry);

   var testObject = new MyApi().NewTicket(newEntry, referrer, supportMethods, stubbedConfigMan);

以上示例显示的是将我的模拟/存根对象传递给我的测试类,ModeltoXml存根发生了一些事情。我无法看到/想出为什么会发生这种情况。

1 个答案:

答案 0 :(得分:1)

最后得到了这个排序。我觉得这个问题与我在ModeltoXml方法中使用泛型有关。我只是在我的ModeltoXml存根中使用了Arg属性来解决问题:

  supportMethods.Expect(x => x.ModeltoXml(Arg<Model1>.Is.Anything)).Return("Model XML response");

我也使用.Expect这次,以便我可以断言该方法被调用,但它将与.Stub一起使用。