3

我有以下内容:

class foo : ObservableCollection<Int32>
{
  //Stuff
}


[Test]
public void test()
{
  var foo = Mock.Of<foo>();
  int count = 0;
  Mock.Get(foo).Setup(x => x.Add(It.IsAny<Int32>())).Callback(() => count++);
  Mock.Get(foo).Setup(x => x.Count).Returns(() => count);
  //Do Stuff
}

但是,Add尤其Countindexer[]不可覆盖的。我唯一的办法是在我的 foo 类中创建Addfoo调用Add等吗?

4

1 回答 1

5

我认为您不应该模拟诸如 , 或 之类的基本类型ListObservableCollection即使DateTime可能)。它们是可靠的,不太可能改变。只需ObservableCollection在您的测试中使用,而不是尝试重新实现它的计数增加功能。您始终可以进行基于状态的验证:

var items = new ObservableCollection<int>();
// Do stuff
Assert.That(items.Count, Is.EqualTo(5));

如果您使用的Foo是继承自您的自定义类型,ObservableCollection<Int32>那么您还可以实现一些IFoo易于模拟的接口:

public class Foo : ObservableCollection<Int32>, IFoo
于 2013-06-20T16:15:35.420 回答