c# - 如何模拟 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(foo).Setup(x => x.Count).Returns(() => count);
  //Do Stuff
}

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

最佳答案

我认为您不应该模拟 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/

相关文章:

c# - 使用 C# 连接到本地 SQL Server 数据库

windows - 阻止 MSVC++ 调试错误阻止当前进程?

c++ - CMake:如何设置库的单元测试

php - 在 PHPSpec stub 上仅模拟一种方法

python - 如何使用 Mock 从导入的模块修补 'open'

java - 每次和任何测试用例初始化 mockito 时出错

c# - 在 MVC4 应用程序提示输入域凭据的 try-catch block 中使用 StringBuilder

c# - 在 mediaElement 中设置位置(WP8.1 中的 ScrubbingEnabled 替代方案)

c# - C# 中的自定义原语?

unit-testing - 如何对具有数据库访问权限的方法进行单元测试?