C# 如何模拟ObservableCollection

C# 如何模拟ObservableCollection,c#,unit-testing,mocking,moq,observablecollection,C#,Unit Testing,Mocking,Moq,Observablecollection,我有以下资料: 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(

我有以下资料:

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
}
class foo:observetecollection
{
//东西
}
[测试]
公开无效测试()
{
var foo=Mock.Of();
整数计数=0;
Mock.Get(foo.Setup)(x=>x.Add(It.IsAny()).Callback(()=>count++);
Mock.Get(foo.Setup)(x=>x.Count)。返回(()=>Count);
//做事
}

但是,
Add
Count
尤其是
索引器[]
不可重写。是我唯一的办法,在我的foo类中创建调用
Add
Addfoo
,等等?

我认为你不应该嘲笑
List
observeCollection
DateTime
等基本类型(即使可能)。它们是可靠的,不太可能改变。只需在测试中使用
observateCollection
,而不是尝试重新实现它的计数增加功能。您始终可以执行基于状态的验证:

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

你为什么要嘲笑这个?是的,我需要更深入地了解考试到底需要什么。这是同事的测试,我忘记了质疑最初假设的黄金法则。这可能是它本身的问题,因为foo中有功能,我们只是在mock上设置
CallBase=true
。因此,我们不必担心覆盖Add、Count等,但是,我们可以覆盖自定义内容
public class Foo : ObservableCollection<Int32>, IFoo