我目前正在使用 C# 进行开发-这里有一些背景:我们使用客户端应用程序实现 MVP,并且我们有一个圈规则,规定任何方法的圈复杂度都不应大于 5。这导致了很多小的私有方法它们通常负责一件事。
我的问题是关于单元测试一个类:
通过公共方法测试私有实现一切都很好......我实现这个没有问题。
但是......以下情况呢:
示例 1.处理异步数据检索请求的结果(回调方法不应该纯粹为了测试而公开)
示例 2.执行操作的事件处理程序(例如更新视图标签的文本 - 我知道的愚蠢示例......)
示例 3.您正在使用第三方框架,该框架允许您通过覆盖受保护的虚拟方法进行扩展(从公共方法到这些虚拟方法的路径通常被视为黑盒编程,并且将具有框架提供的各种依赖项你不想知道)
在我看来,上面的例子并不是设计不佳的结果。它们似乎也不适合转移到单独的类进行单独测试,因为这些方法将失去它们的上下文。
有人对此有任何想法吗?
干杯,杰森
编辑: 我认为我最初的问题不够清楚 - 我可以使用访问器测试私有方法并使用 TypeMock 模拟调用/方法。那不是问题。问题是测试不需要公开或不能公开的东西。
我不想为了测试而公开代码,因为它可能会引入安全漏洞(只发布一个接口来隐藏它不是一种选择,因为任何人都可以将对象转换回其原始类型并访问我的东西不希望他们这样做)
重构到另一个类进行测试的代码很好 - 但可能会丢失上下文。我一直认为拥有“帮助器”类是不好的做法,它可以包含一堆没有特定上下文的代码——(在这里考虑 SRP)。我真的认为这也不适用于事件处理程序。
我很高兴被证明是错误的——我只是不确定如何测试这个功能!我一直认为,如果它可以破坏或改变 - 测试它。
干杯,杰森