帮助进行设计和(更重要的)单元测试.(有点像战略模式)


Help with design and (more importantly) unit testing. (Something like strategy pattern)

我正在研究简单的基准测试"框架"(原因:无聊和练习)。现在我正试图弄明白什么。第一件事:

class DataManager {
    private $persistanceStrategy;
    public function __construct(IPersistence $persistenceStrategy) {
        $this->persistanceStrategy = $persistenceStrategy;
    }
    public function saveData() {
        $this->persistanceStrategy->saveData($params);
    }
    public function getData() {
        $this->persistanceStrategy->getData($params);
    }
}
interface IPersistence {
    public function saveData(array $params);
    public function getData(array $params);
}
class XMLPersistence implements IPersistence {
    // Params would contain something like path to the
    // xml file, and unique name of some tag
    public function saveData(array $params) {
         // write something to xml file
    }
    public function getData(array $params) {
       // get something from xml file
    }
}
class DBPersistence implements IPersistence {
 // $params would contain unique name of data that is needed
 // and data for db connection
  ...
}
class SessionPersistence implements IPersistence {
  ....
}

问题:

  1. 有没有更好的方法来设计这部分代码。

  2. 如何对DataManager类和"策略"类进行单元测试?

  1. 在这里使用散乱模式对我来说是有意义的,所以我没有任何改进建议。

  2. 这里有一个博客,提供了一种测试DataManager类的方法。基本上,您给它一个mock策略类,并确保确实调用了正确的策略方法。

    测试你的模拟

    我认为测试持久性类会很简单,确保XMLPersistence生成预期的xml数据,DB将数据放入预期的数据库,并且可能针对预期的序列化断言Session。