CppUnit не очень подходит для создания автоматических тестов для пользовательского интерфейса.Это больше для обработки только единиц.Например, предположим, что вы создали замену для std::vector
и хотите убедиться, что она ведет себя как оригинальная, вы можете написать тесты, которые добавляют элементы как к вашей, так и к стандартной реализации, а затем выполнить некоторую дополнительную обработку (удаление, изменение элементов).и т. д.) и после каждого шага проверяйте, имеют ли они одинаковый результат.
Для пользовательского интерфейса мне не известны хорошие инструменты с открытым исходным кодом / бесплатные инструменты, но один хороший коммерческий инструмент - TestComplete от SmartМедведь , среди прочих.
Для второго примера, который вы привели, первым делом нужно определить проверку достоверности для метода Reflect ().Например, вы можете вручную вычислить результат некоторых значений, чтобы проверить, соответствует ли возвращаемое значение каждому из них ожидаемому.Или вы можете использовать обратную функцию, которая, как известно, полностью работает.
Предполагая первый вариант, вы можете написать тест следующим образом:
class CRC32Test : public CppUnit::TestCase
{
public:
CRC32Test( std::string name ) : CppUnit::TestCase( name ) {}
void runTest()
{
struct Sample {unsigned long ulReflect; char cChar; unsigned long result};
static Sample samples[] =
{
// Put here the pre-calculated values
};
int count = sizeof(samples) / sizeof(Sample);
for (int i = 0; i < count; ++i)
CPPUNIT_ASSERT(subject.Reflect(samples[i].ulReflect, samples[i].cChar) == samples[i].result);
}
private:
CRC32 subject;
};
int main(void)
{
CppUnit::TextUi::TestRunner runner;
runner.addTest(new CppUnit::TestCaller<CRC32Test>("test CRC32", &CRC32::runTest));
runner.run();
}