Помощь в разработке и (что более важно) модульное тестирование. (Что-то вроде паттерна стратегии) - PullRequest
2 голосов
/ 24 июня 2011

Я работаю над простым эталонным «фреймворком» (причина: скука и практика). Теперь я пытаюсь что-то обдумать. Перво-наперво:

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 Ответ

3 голосов
/ 24 июня 2011
  1. Использование строгого шаблона имеет для меня смысл, поэтому у меня нет предложений по улучшению.

  2. Вот блог с одним из способов проверить вашиКласс DataManager.По сути, вы даете ему класс фиктивной стратегии и убедитесь, что правильные методы стратегии действительно называются.

    Тестирование ваших макетов

    Я думаю, что тестирование классов персистентности было бы простым,убедитесь, что XMLPersistence создает ожидаемые данные xml, DB помещает данные в ожидаемую базу данных, и, возможно, Session утверждается против ожидаемой сериализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...