犀牛嘲笑单位测试方法args

时间:2011-11-19 21:00:33

标签: wpf unit-testing mvvm rhino-mocks

我是犀牛模拟和单元测试的新手。我开始为我的wpf mvvm应用程序编写一些测试。以下是我要测试的示例场景:

视图模型:

List<DataItems> _theData = new List<DataItems>();
public MyViewModel(IServer server)
{
  _server = server;
  InitializeData();
}

private void InitializeData()
{
  _server.GetData(MyCallback);
}

private void MyCallback()
{
  _theData = _server.TheData;
}

public List<DataItems> VMData
{
   get
   {
     return _theData;
   }
}

服务器:

public List<DataItems> TheData
{
  get
  {
    return _cachedData;
  }
}

public void GetData(Action callBack)
{
  //Populate cached data
  ...

  if(callBack != null)
  {
    callBack();
  }
}

在我的测试中,我想验证viewModel.VMData.Count == server.TheData.Count。我尝试使用rhino mocks来存根服务器,使用一些值预先填充TheData。我调用了视图模型构造函数,然后尝试比较计数。

我的问题是我不知道如何让我的服务器实际回调到我的视图模型。调用vm构造函数后,将按预期调用InitializeData(),但不会调用存根服务器的GetData调用。

如何进行这项简单的测试?

1 个答案:

答案 0 :(得分:0)

如果你正在对IServer进行存根并且期望在存根上调用一个方法将调用你的具体类中的实现,那就是你的错误观念。存根实例上的GetData方法只返回您告诉它的内容,而不执行具体依赖项中的任何代码。请记住,您的存根IServer对象与您的IServer具体实现的唯一共同点是它们都实现了IServer。期望在调用存根上的方法时,在具体实现中方法中的副作用是错误的。

关于如何使它工作:没有真正的好方法来进行这个测试,因为你正在说明这些类的设计。您正试图测试在您参与的存根中发生的副作用。要真正测试你想要的东西,如果你想用这种关系保持这些类,我建议你不要模拟服务器并使用真实对象。重新设计服务器,使其依赖于从缓存加载的另一个组件,这样你就可以存根。

相关问题