c# - NMock - 如何使具有相同参数类型的方法返回不同的值?

标签 c# mocking return-value nmock

我有一个这样的方法:

public string MyMethod(string a, string b)
{
  if(a == "abcd" && b == "xyz")
    return "good";

  if(a == "xyz" && b == "something")
        return "even better";

  return "unexpected";
}

   public string MainMethod()
   {
     string s1, s2;
     if(some condition)
     {
       s1= "abcd";
       s2 = "xyz";
     } 

     return service.MyMethod(s1, s2);

   }

我的模拟对象是这样创建的

   AppObj obj = new AppObj();

  Mockery mocks = new Mockery();
  mockMyService = mocks.NewMock<IMyService>();
  Expect.Once.On(mockMyService ).Method("MyMethod").
                 With("abcd", "xyz").
                 Will(Return.Value("good"));

   obj.MainMethod();
   Expect.Once.On(mockMyService ).Method("MyMethod").
                 With("xyz", "something").
                 Will(Return.Value("even better"));
   obj.MainMethod();

上面代码的问题是,它总是采用第一个模拟方法的参数并返回“good”。我需要做什么才能使 NMock 对于具有不同参数值的同一方法返回不同的值?请帮忙!!

最佳答案

明白了!!

需要使用mock.Ordered。

所有模拟方法都以无序的方式调用。要使其订购,必须使用:

Using(mock.Ordered)
{
   MyMethod1(arg1, arg2);
   MyMethod2(arg2, arg1);
}

就是这样!! :)

关于c# - NMock - 如何使具有相同参数类型的方法返回不同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4388633/

相关文章:

c# - 间接访问需要 volatile 吗?

reactjs - 如何为调用 props 中接收的函数的函数添加单元测试

javascript - 有什么方法可以判断 javascript 函数是否已返回?

ruby - RSpec stub : Return the parameter

c# - 使用VS2019创建WebService

c# - 使用 RestSharp 时如何惯用地处理 HTTP 错误代码?

javascript - ASP.NET C# <asp :Button type ="button"> but still acting like <asp:Button type ="submit">

unit-testing - 如何在Grails中的Config.groovy中模拟值以进行单元测试

c# - TDD:你会如何在这门课上工作,测试先行的风格?

c++11 - 如何允许派生类通过虚拟方法返回类型上的任何迭代器?