我目前正在参与使用C#进行开发 - 这里有一些背景: 我们使用我们的客户端应用程序实现了MVP,我们有一个圈规定,没有任何方法的圈复杂度应大于5. 这导致了很多小型的私人方法,这些方法通常对一件事负责。单元测试专用代码
我的问题是关于单元测试类:
测试通过的公共方法私有实现是所有罚款...我没有贯彻这是一个问题。
但是......怎么样了以下情况:
例1处理异步数据retrival请求的结果(回调方法不应该纯粹是为了测试是公开的)
例2.的事件,其确实的操作(如更新查看标签的文本 - 傻的例子,我知道...)
例3您正在使用第三方框架,该框架允许您通过覆盖受保护的虚拟方法来进行扩展(从公共方法到这些虚拟方法的路径通常被视为黑盒编程,并且将具有框架提供的各种依赖关系不想知道)
上面的例子在我看来不是由于糟糕的设计。 他们似乎也不会成为单独进行单独测试的候选人,因为这样的方法会失去其背景。
对此有没有人有任何想法?
干杯, 杰森
编辑: 我不认为我是在我原来的问题很清楚 - 我可以测试使用访问私有方法和使用TypeMock模拟出呼叫/方法。这不是问题。问题在于测试不需要公开的东西,或不能公开的东西。
我不想为了测试而公开代码,因为它可能引入安全漏洞(只发布一个接口来隐藏这个不是一个选项,因为任何人都可以将对象转换回原始类型并获得访问的东西,我不希望他们)
重构到另一个类进行测试的代码很好 - 但可能会丢失上下文。我一直认为有一个不好的习惯,那就是有'辅助'类,它可以包含一堆没有特定上下文的代码 - (在这里思考SRP)。我真的不认为这也适用于事件处理程序。
我很高兴被证明是错误的 - 我只是不确定如何测试这个功能!我一直认为,如果它可以打破或改变 - 测试它。
干杯,杰森
你将使用什么隔离框架? – 2009-10-01 21:01:38
我正在使用Typemock隔离器。嘲笑方法调用很容易 - 我真的不喜欢这样做,因为它会改变被测试类的行为! – Jason 2009-10-03 10:25:51
所有这些让我希望我可以从头开始写自己的框架,所以我可以设计这些问题开始! – Jason 2009-10-03 11:02:13