Как я могу протестировать фабрику? - PullRequest
1 голос
/ 08 февраля 2011

Я тестирую свои классы модулем, давая всем моим классам интерфейс. Эти интерфейсы, в свою очередь, имеют свои собственные макеты.

Но допустим, у меня есть следующее:

class IData
{
  GetData()
}

class IOnScreenDataCalculator
{
  Calculate(IData)
}

class OnScreenData : IOnScreenData
{
  OnScreenData(PTR_T(IData), PTR_T(IOnScreenDataCalculator))

    enter code here

  GetOnScreenData()
}

Теперь допустим, что я хочу иметь несколько фабрик для разных типов данных и калькуляторов. Как я могу провести модульное тестирование этих заводов, где мои заводы работают следующим образом:

OnScreenBlueDataForWideScreenFactory
{
  PTR:T(IOnScreenData) Create()
  {
    PTR_T(Data) data = ptr_t(new BlueData());
    PTR_T(IOnScreenDataCalculator) calculator = ptr_t(new WideScreenDataCalculator());
    PTR_T(IOnScreenData) onScreenData = ptr_t(new WideScreenDataCalculator(data, calculator ));

    return onScreenData;
  }
}

Спасибо за вашу помощь,

Барри.

Ответы [ 2 ]

3 голосов
/ 08 февраля 2011

Я не уверен, что фрагменты кода действительно c ++, но пример должен выглядеть примерно так:

class ExampleIface
{
  public:
    virtual ~ExampleIface() {}
    virtual void a() = 0;
};

class Example1: public ExampleIface
{
  public:
    virtual ~Example1() {}
    virtual void a()
    {
      // something
    }
};

class ExampleFactory
{
  public :
    typedef ExampleIface * ExamplePtrType; // can be shared_ptr instead

    static ExamplePtrType Create( /*params?*/)
    {
      ExamplePtrType p( new Example1 );
      return p;
    }

  private:
    ExampleFactory();
    ~ExampleFactory();
};

и юнит-тест:

void test_Create()
{
  ExampleFactory::ExamplePtrType p = ExampleFactory::Create();
  Example1 *realType = dynamic_cast< Example1* >( p );
  TS_ASSERT( NULL != realType ); // if you use cxxtest
}
3 голосов
/ 08 февраля 2011

Я бы вызвал Create () и проверил, что я получил правильно сконструированный объект с правильными составными типами.

...