我有以下内容:
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
和 Count
尤其是 indexer[]
是不可覆盖的。我唯一的办法是创建在我的 foo 类中调用 Add
的 Addfoo
等吗?
最佳答案
我认为您不应该模拟 List
这样的基类型, ObservableCollection
, 或 DateTime
(即使有可能)。它们是可靠的并且不太可能改变。只需使用 ObservableCollection
在您的测试中,而不是尝试重新实现它的计数增加功能。您始终可以进行基于状态的验证:
var items = new ObservableCollection<int>();
// Do stuff
Assert.That(items.Count, Is.EqualTo(5));
如果您使用自定义类型 Foo
这是继承自 ObservableCollection<Int32>
那么你也可以实现一些IFoo
易于模拟的接口(interface):
public class Foo : ObservableCollection<Int32>, IFoo
关于c# - 如何模拟 ObservableCollection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17218514/