首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cppcheck在模板中使用时会抱怨unreadVariable。

cppcheck在模板中使用时会抱怨unreadVariable。
EN

Stack Overflow用户
提问于 2016-10-28 13:28:51
回答 2查看 969关注 0票数 2

有人能解释一下为什么下面的单元测试代码给出了cppcheck中n和k的错误unreadVariable吗?组合是一个模板类,它计算n的所有组合,选择k,但这在这里不重要。

代码语言:javascript
复制
TEST(Combinations, ChooseOne)
{
    const UINT8 n = 3;
    const UINT8 k = 1;

    Combinations<n, k> comb;
    comb.calc();
    std::vector< std::vector<UINT8> > _vui8Expect = { { 2 }, { 1 }, { 0 } };
    EXPECT_THAT(comb.result, ::testing::ContainerEq(_vui8Expect));
}

我可以将代码更改为下面的代码,而不再获得cppcheck错误。但我不喜欢这样,因为它减少了代码的冗长性。n,k是统计量中定义良好的数量,它们在所谓的“正在发生的事情”中更加清楚。

代码语言:javascript
复制
TEST(Combinations, ChooseOne)
{
    Combinations<3, 1> comb;
    comb.calc();
    std::vector< std::vector<UINT8> > _vui8Expect = { { 2 }, { 1 }, { 0 } };
    EXPECT_THAT(comb.result, ::testing::ContainerEq(_vui8Expect));
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-28 13:51:00

这是一个已知的问题:http://trac.cppcheck.net/ticket/7542

因此,除非它是固定的,cppcheck会报告这个假阳性。

票数 2
EN

Stack Overflow用户

发布于 2016-10-28 13:50:36

我试着把这个写在评论里,但这里有一个想法。

据我所知,Google测试正在以以下方式使用TEST子句:

代码语言:javascript
复制
TEST(test_case_name, test_name) {
 ... test body ...
}

我个人没有遇到过类似的情况,但在您的示例中,您的测试用例名称和实际测试的类是完全相同的。对我来说好像是某种名字的碰撞。

你试过改名吗?

代码语言:javascript
复制
TEST(Combinations, ChooseOne)
{
    const UINT8 n = 3;
    const UINT8 k = 1;

    Combinations<n, k> comb;
    comb.calc();
    std::vector< std::vector<UINT8> > _vui8Expect = { { 2 }, { 1 }, { 0 } };
    EXPECT_THAT(comb.result, ::testing::ContainerEq(_vui8Expect));
}

致:

代码语言:javascript
复制
TEST(CombinationsTest, ChooseOne)
{
    const UINT8 n = 3;
    const UINT8 k = 1;

    Combinations<n, k> comb;
    comb.calc();
    std::vector< std::vector<UINT8> > _vui8Expect = { { 2 }, { 1 }, { 0 } };
    EXPECT_THAT(comb.result, ::testing::ContainerEq(_vui8Expect));
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40306148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档