我有一个名为FooJob()的类,它在WCF Windows服务上运行。这个类只有2个公共方法,构造函数和一个Run()方法。仅测试中型课堂上的公共方法?
当客户打电话给我服务,昏暗的作业类的新实例,传递一些参数的构造函数,然后调用运行()...
的run()将采取的参数,做一些逻辑,发送(实时)请求外部数据供应商,采取的应对,做一些业务逻辑,然后把它在数据库中...
是否明智只写一个单元测试,然后(如果甚至可能)在Run()函数中?或者我会在这里结束自杀吗?在这种情况下,我应该钻入私有函数并单元测试FooJob()类的函数吗?但是,那么这会不会“破坏”TDD中一些人认为的“唯一测试行为”/公共接口范例?
我意识到这可能是一个含糊不清的问题,但在正确的方向有什么建议/指导或点,将不胜感激。
Drew
谢谢......但我有一个问题 - 我们在什么时候过度设计和构建太多的类,何时我们可以单元测试一些私有函数?这里有什么一般的经验法则吗?只要去你的肠道...? – dferraro 2009-10-20 13:55:18
我建议看看面向对象设计的固体原则(http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod),其中单一责任原则是其中之一。我也尽量不考虑把事情分解成多个类来过度工程,因为每个类都变得更简单和更容易理解。我会说“如果你觉得需要单独测试一个私人方法,那么它应该是另一个班级”,这将是一个经验法则,以及我上面所说的必须列出课程责任的内容。 – ColinD 2009-10-20 15:59:48
我把课程分开,直到不能再分开为止。如果您避免返回值,并将类看作是将消息发送给另一个,则这变得更容易概念化。微类具有非常容易理解的好处,以及添加新行为通常是通过添加更多类来完成的,这意味着您可以单独保留现有的经过测试的代码。这是好事。 – kyoryu 2009-12-03 05:42:51