为什么我不能在 GMock `EXPECT_CALL` 中进行断言?

问题描述 投票:0回答:1

我在我的项目中使用gtest/gmock-1.12.1。

我需要在调用模拟方法时进行断言,如下所示:

#include <gmock/gmock.h>
#include <gtest/gtest.h>

using namespace std::placeholders;
using namespace std;
using namespace testing;

struct MyMock_t {
    MOCK_METHOD( bool, isEven, ( int ), ( const ) );
    MOCK_METHOD( void, isNeg, ( int ), ( const ) );
};

int main() {

    MyMock_t moc;

    EXPECT_CALL( moc, isEven( _ ) ).WillRepeatedly( Invoke( []( int i_ )->bool{
        ASSERT_GT( i_, 0 ); // this line can NOT be compiled.
        return i_ % 2 == 0;
    } ) );

    EXPECT_CALL( moc, isNeg( _ ) ).WillRepeatedly( Invoke( []( int i_ ) {
        ASSERT_LT( i_, 0 ); // this line is OK.
    } ) );

    moc.isEven( -3 );
    moc.isNeg( -3 );
};

如果我传递给

EXPECT_CALL
的lambad有返回类型,我可以在其中执行
ASSERT

在我的真实项目代码(不是这个例子)中将它们从 lambda 移出太麻烦了,因为需要完成太多断言,并且

EXPECT_CALL
在子线程中触发而不是测试主线程(我必须解决线程同步问题)。

如何让他们留在

EXPECT_CALL
的lambda中?

编译错误:

在 lambda 函数中:

LambdaAssert.cpp:18:9:错误:无效值没有被忽略,因为它应该是

18 | ASSERT_GT( i_, 0 );

multithreading lambda googletest assert googlemock
1个回答
0
投票

要么在另一个 lambda 中调用它

[]{ ASSERT_GT( i_, 0 ); }();

或者有条件地不通过测试

if ( i_ <= 0 ) FAIL() << "Message";
© www.soinside.com 2019 - 2024. All rights reserved.