-2

我想创建一个有助于 C++ 单元测试的宏。我不想仅为测试目的创建新对象。是否可以传递像 (ClassName::function) 这样的类函数引用?

#define TEST(func_ptr,X,Expercted) \
(__extension__ ( \
{ \
  __typeof__(X) __x = (X); \
  __typeof__(Expercted) __y = (Expercted); \
  result= funct_ptr(__x);\
  //------- do some testing stuffs-----\
 } \
))

我有一个 A 类及其方法 square()

int main(){
  TEST(&A::square,2,4);
  return 0;
 }

我想测试 square 函数是否返回真值。

上面的代码给出了错误。如何解决问题。其他方式的解决方案是可观的

4

2 回答 2

2

您正在传递一个非静态成员函数指针,它需要一个类实例来调用。如果将其更改为静态成员或自由函数,它应该可以正常工作。

class A{
    ...
    static bool square(...);
};

TEST(A::square,...);

或者

bool square(...);

TEST(square,...);

您的宏也有错字 - func_ptr vs funct_ptr

于 2013-02-07T05:37:04.750 回答
2

根据标准,您不能在不创建对象的情况下调用非静态成员函数。这就是为什么你应该创建一个(for ex. )的对象并像这样调用AA a

A a;
TEST( std::bind( &A::square, &a ), 2, 4 );

如果您要问将宏用于此类目的是否是个好主意,我会告诉您-不。而是写一个函数。像这样

template< class F, class Ex >
bool test( F f, Ex expected ) {
    Ex res = f();
    return res == expected;
}
...
assert( test( std::bind( &A::square, &a, 2 ), 4 ) );
于 2013-02-07T05:37:38.877 回答