Сделать объект доступным для всех методов c

#c

#c

Вопрос:

Кто-нибудь может мне помочь с этим? в принципе, у меня есть тестовый класс, в этом тестовом классе у меня есть несколько методов, которые используют один и тот же тип настройки. Позвольте мне показать вам на примере:

 class Test:public CxxTest::TestSuite
{
  public:

  void Test1(){/*...*/}
  void Test2(){/*...*/}
};
  

Для каждого метода тестирования требуется один и тот же тип настройки:

 Class c_objectName = AnotherClass::method("c_name","c_name","c_name");
class c_newObjectName = AnotherCLass::create(c_objectName);
  

В настоящее время я устанавливаю это в каждом отдельном методе, потому что каждый из вышеперечисленных, которые я начал с «c_ …», должен отличаться.

Я попытался создать «глобальный метод», который каждый раз принимал бы строку для их переименования, но затем, похоже, я не могу получить к ним доступ из вызовов методов. Я попробовал следующее:

 class Test:public CxxTest::TestSuite
{
  public:
  void method()
  {    Class c_objectName = AnotherClass::method("c_name","c_name","c_name");    <--- cant access these 
       Class c_newObjectName = AnotherClass::create(c_objectName);
  }
  void Test1(){/*...*/}
  void Test2(){/*...*/}
};
  

Есть ли способ поместить это в какой-то «глобальный метод», чтобы я мог получить к ним доступ из методов?

Я действительно плохо разбираюсь в объяснениях, так что извините и заранее спасибо

Комментарии:

1. Что вы имеете в виду, «не могу получить к ним доступ»? Какие ошибки вы получаете?

2. Если я что-то не пропустил, похоже, вы ищете «переменные-члены».

3. Что такое «Класс»? Вы не создаете объекты в C с помощью ‘new’, если не используете указатели.

Ответ №1:

Я не могу разобраться в вопросе, но, похоже, что-то подобное поможет:

  struct TestFixture
 {
      Class c_objectName;
      Class c_newObjectName;
 };

 TestFixture makeFixture()
 {
     TestFixture fixture; 
     fixture.c_objectName = new Class("c_name","c_name","c_name");
     fixture.c_newObjectName = create(c_objectName);
     return fixture;
 }
  

(предполагая, что ваш класс (классы?) Можно копировать. Если нет, верните указатель на новый экземпляр TestFixture или что-то вроде scoped_ptr

Затем вы могли бы использовать его в своих методах тестирования:

  void Test1()
 {
      TestFixture fixture = makeFixture();
      // use fixture.c_objectName etc.
  

Если вы не возражаете против совместного использования данных, вы могли бы просто сделать их полями класса Test .

О, я только что понял, что вы используете CxxTest Edit, который, вероятно, имеет лучший способ создания приспособлений / настройки / демонтажа для модульных тестов. Однако описанный выше подход должен работать в любой среде.

Комментарии:

1. Вы правы, я использую Cxx, но я до сих пор не знаю, как это сделать правильно, также я не хотел писать «новый», я просто пытался показать грубый набросок, который я отредактировал выше, чтобы показать это