Ух ты, это прекрасно сработало для меня.
Я был обеспокоен, что это не так, поскольку моим юнит-тестам нужен доступ к закрытым членам классов, созданных в других динамических библиотеках (.so-файлах), но это как раз то, что мне нужно.
Мне нужно только объявить флаг в моих модульных тестах .so (каждый тест - .so). Даже в библиотеках, где определены объекты, к которым осуществляется доступ.
Мне нужно было получить доступ к внутренним виджетам в форме, чтобы заполнить их значения; они не видны для остальной части программы, но необходимы, если мои тесты должны представлять пользователя, вводящего ввод. Просто подумал, что поделюсь примером использования для этих скептиков частного доступа:)
Также для полноты, вот мой класс формы, показывающий приватное поле name_:
struct EditProduct : public widgets::BusinessObjForm<model::Product> {
public:
EditProduct (WContainerWidget *parent=0);
protected:
void fillObjFields();
private:
// Consts
static const double minPrice = 0.0;
static const double maxPrice = 10000.0;
// Fields
WLineEdit* name_;
WTextEdit* description_;
WSpinBox* price_;
WFileUpload* image_;
// Methods
bool validate();
void saveProduct(const WString& message);
};
и вот начало моего юнит-теста доступа к этому виджету:
BOOST_AUTO_TEST_CASE( form_save_test )
{
EditProduct form(app.root());
string txt = "this is a product";
form.name_->setText(txt);
BOOST_CHECK_EQUAL(form.name_->text(), txt);
}