程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了GTest 参数化测试从数组或类似解包 Values 参数大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决GTest 参数化测试从数组或类似解包 Values 参数?

开发过程中遇到GTest 参数化测试从数组或类似解包 Values 参数的问题如何解决?下面主要结合日常开发的经验,给出你关于GTest 参数化测试从数组或类似解包 Values 参数的解决方法建议,希望对你解决GTest 参数化测试从数组或类似解包 Values 参数有所启发或帮助;

使用 GTest 进行简单的参数化测试,例如:

        // Add an OnClickListener to the dialog,so that the SELEction will be handled.
        builder.setMultiChoiceItems(
                categorIEs,checkedItems,new DialogInterface.onMultiChoiceClickListener() {

                    @OverrIDe
                    public voID onClick(DialogInterface dialog,int which,Boolean ischecked) {
                        checkedItems[which] = ischecked;
                    }
                }
        );
@H_696_7@

如果我想从数组中生成值,例如:

class Example :public ::tesTing::TestWithParam<std::tuple<int,int>> {

};

test_P(LeapYearMultipleParametersTests,checksIfLeapYear) {
    int a = std::get<0>(Getparam());
    int b = std::get<1>(Getparam());
    ASSERT_EQ(a,b);
}

INSTANTIATE_test_CASE_P(
        Ex,Example,::tesTing::Values(
                std::make_tuple(0,0),std::make_tuple(1,2)
));
                
@H_696_7@

然后使用该数组作为 auto make_values() { std::tuple<int,int> res[2]; res[0] = std::make_tuple(0,0); res[1] = std::make_tuple(1,2); return res; } 中的参数,例如:

::tesTing::Values(...)@H_696_7@

如何将数组解包为多个参数?


编辑:

我已经找到了一个定义模板函数的部分解决方案

INSTANTIATE_test_CASE_P(
        Ex,::tesTing::Values(make_values())
));
@H_696_7@

然后像这样使用它:

template<typename T,std::size_t... I>
    auto values(T* t,std::index_sequence<I...>)
    {
        return ::tesTing::Values(t[I]...);
    }
@H_696_7@

但是第二个参数values(make_values() /*res*/,std::make_index_sequence<2>{}); 并不是很优雅。无论如何,使用另一个 std::make_index_sequence<2>{} 来提供第二个参数是可能的吗?

解决方法

问题的关键是使用 ::tesTing::ValuesIn 而不是 ::tesTing::Values。因为在您的情况下,您正在传递容器而不是一堆值。完整的答案将如下所示:

class Example : public ::tesTing::TestWithParam<std::tuple<int,int>> {
};

test_P(Example,checksIfLeapYear)
{
    int a = std::get<0>(GetParam());
    int b = std::get<1>(GetParam());
    ASSERT_EQ(a,b);
}

using ValuesContainer = std::vector<std::tuple<int,int>>;

ValuesContainer make_values()
{
    ValuesContainer res;
    res.emplace_BACk(0,0);
    res.emplace_BACk(1,2);

    return res;
}

INSTANTIATE_test_CASE_P(
    Ex,Example,::tesTing::ValuesIn(make_values())
);
@H_696_7@@H_618_62@ 


 
@H_618_62@

大佬总结

以上是大佬教程为你收集整理的GTest 参数化测试从数组或类似解包 Values 参数全部内容,希望文章能够帮你解决GTest 参数化测试从数组或类似解包 Values 参数所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。