c – 对不适合作为新类提取的私有方法进行单元测试的好方法是什
粗略地说,我有一个实现一个只运行一个公共方法的线程的类.该方法进入一个循环,就像调度程序一个接一个地处理网络消息;如下:
class WorkerThread { public: void run() { while (!b_shutdown) { message = getNextMessage(); switch(message.type) { case WRITE: write(); case READ: read(); // ... // more cases to handle } } } private: void write() { /* logic to test */ } void read() { /* logic to test */ } // more private methods with logic that needs testing // some member variables }; 所以重点是我真的不想 >将私有方法提取到另一个类,因为在语义上它们是此WorkerThread的一部分. 但是,如何优雅地测试私有方法呢? 注意: >可能需要更多的公共方法来处理线程的启动和终止,但这不是问题所在. 解决方法
引用问题:
那是错的.你违反了Single Responsibility Principle. 提供“多线程支持”和“做实际工作”是两回事.您不应强制执行“执行实际工作”是私有实现细节. 从这个意义上说:你为自己制定的规则实际上导致你难以编写测试代码.因此,不要“解决”糟糕设计的症状 – 更好地退后一步并修复您的设计. 换一种说法: >重做你的工作线程,以便能够运行任何类型的工作 通过这样做,不仅可以改进您的设计,还可以使测试更容易:因为现在,您可以在没有任何多线程复杂性的情况下对“执行实际工作”进行单元测试.你只是断言,按顺序完成后东西才有用.然后你自己测试多线程部分;不用担心实际的工作.最后,一切都很好地融合在一起. 而不是担心如何测试内部实现细节.哪个 – 你没有;另一个答案完全正确! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |