对不适合作为新类提取的私有方法进行单元测试的好方法是什么?

wln*_*ana 3 c++ tdd unit-testing design-patterns

粗略地说,我有一个实现只有一个公共方法的线程的类run.该方法进入一个循环,就像调度程序一个接一个地处理网络消息; 如下:

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
};
Run Code Online (Sandbox Code Playgroud)

所以重点是我真的不想

  1. 将私有方法提取到另一个类,因为在语义上它们是其中的一部分WorkerThread.
  2. 使方法公开,因为它们不在类之外的任何地方使用.
  3. 跳过测试,因为它是那些实现主逻辑的方法.

但是,如何优雅地测试私有方法呢?

注意:

  1. 可能还需要一些公共方法来处理线程的启动和终止,但这不是问题所在.
  2. 我认为这个问题并不局限于此c++,所以我用更流行的静态类型标记它Java以获得更多关注:P

mat*_*uxe 10

简单地说:不要.测试公共接口,没有别的.最终,这是唯一重要的事情.

如果你想看看它是否正常工作,应该通过一个IoInterface可以模拟出来进行测试的读/写功能.