如何在UnitTest ++中使用实用程序功能

时间:2009-03-23 06:26:39

标签: c++ unit-testing

我正在使用UnitTest ++来测试C ++代码。

在我的测试中,有一组我多次重复的测试。我想要的是实用程序功能来执行这些测试。简而言之,我想接受这个:

TEST( foo ) {
    Foo one;
    Foo two;

    // init one & two
    // lots of CHECK_CLOSE(one.bar, two.bar, 1e-5); in repeating cycles
}

TEST( bar ) {
    Foo one;
    Foo two;

    // init one & two
    // lots of CHECK_CLOSE(one.bar, two.bar, 1e-5); in repeating cycles
}

并使用此:

void blah( const Foo& one, const Foo& two ) {
    // lots of CHECK_CLOSE(one.bar, two.bar, 1e-5);
}

TEST( foo ) {
    Foo one;
    Foo two;

    // init one & two
    blah(one, two);
}

TEST( bar ) {
    Foo one;
    Foo two;

    // init one & two
    blah(one, two);
}

由于UnitTest ++的宏操作,这不起作用。解决这个问题的最佳方法是什么?

编辑:我现在无法查看的一些想法。

  1. 如果我使用夹具,使用struct中的效用函数,我是否可以从此函数中调用UnitTest ++宏?
  2. 我可以写一个宏来执行常见的测试。我真的不喜欢这个,但至少我会坚持干......

3 个答案:

答案 0 :(得分:2)

写一个宏来做。不要让“宏是邪恶的”咒语向你隐瞒这一事实:宏旨在生成重复的代码。

答案 1 :(得分:0)

我建议不要这样做,因为发生的事情是你丢失了很多关于哪个测试失败的信息,包装函数现在包含了两个或更多测试的功能,所以当它失败时你必须追溯回来看看测试失败的原因是什么。

答案 2 :(得分:0)

使您的常用检查功能返回bool。然后在每个TEST中检查或确定常用函数的结果。