如何使用Google测试用例测试迭代器值?

时间:2018-09-28 05:29:06

标签: c++ googletest

我需要使用Google测试用例插入的实际值来测试每个迭代器访问值,以下是我的代码段。

import java.util.Scanner;

public class Serioustake1 
{
    public static void main(String[]args)
    {
        int age;
        String a = "Donald John Trump" ,b = "Height :",c = "Age :", d = "Name : ";
        float height;   

        Scanner input = new Scanner(System.in);

        System.out.print("Please enter the height of president:");
        height=input.nextFloat();

        System.out.print("Please enter the age of president:");
        age=input.nextInt();

        System.out.println("\n\n\t\t\t$$$$$$$$$$$$$$$$$$$$$$$$$$");
        System.out.println("\t\t\t\tPresident Details");
        System.out.println("\t\t\t$$$$$$$$$$$$$$$$$$$$$$$$$$$");

        System formatString = String.format("%-15s%-10s\n%-15s%-10.1f\n%-15s%-10d",
                                              d,a,b,height,c,age);
        System.out.print(formatString);

    }
}

在注释行上方,我需要使用迭代器值测试每个插入的值,我是这个Google测试用例的新手,请帮助我解决这个问题。

我根据“ Caleth”建议更新了代码,对此我遇到了错误,我是这个Google测试的新手,请提出建议,这是我更新的代码

TEST(EVTValSortedVector,  StdIteratorAccess1)
{
EVTValSortedVector<Dog> eTerriers;

eTerriers.insert(Dog("Cairn Terrier",4));
eTerriers.insert(Dog("Irish Terrier",3));
eTerriers.insert(Dog("Schnauzer",3));

EVTValSortedVector<Dog>::iterator i;
for (i = eTerriers.begin(); i != eTerriers.end() ; i++ ) {
//  EXPECT_EQ((i), "Cairn Terrier"); // Here i need to check each iterator 
                                      //value with actual value inserted(here i wrote sample for only one element)
}
}

我为此遇到了错误,请提出建议。

testEVTValSortedVector.cpp:193:错误:“ eTerriers [0]”中的“ operator []”不匹配 testEVTValSortedVector.cpp:193:错误:模板参数1无效 testEVTValSortedVector.cpp:194:错误:'eTerriers [1]中'operator []'不匹配:testEVTValSortedVector.cpp:194:'eTerriers [1]'testEVTValSortedVector.cpp中'operator []'不匹配: 195:错误:'eTerriers [2]'testEVTValSortedVector.cpp中的'operator []'不匹配:195:错误:'eTerriers [2]'中的'operator []'不匹配

1 个答案:

答案 0 :(得分:1)

在所有情况下,您编写的任何循环都将执行。不要编写循环。

EXPECT_EQ(eTerriers[0], "Cairn Terrier");
EXPECT_EQ(eTerriers[1], "Irish Terrier");
EXPECT_EQ(eTerriers[2], "Schnauzer");

请注意,此测试并没有真正告诉您EVTValSortedVector保持排序顺序,您已从排序输入开始。

更好的测试方法是搜索相邻的元素,以查看列表中是否有一个较早的元素是>=后一个元素。

// If we find no adjacent pair of elements `elemN, elemM` such that `elemN >= elemM`, then the list is in ascending order
EXPECT_EQ(std::adjacent_find(eTerriers.begin(), eTerriers.end(), std::greater_eq<Dog>{}), eTerriers.end());

此测试eTerriers在不了解您开始使用的数据的任何信息的情况下进行,这意味着可以在测试设置中生成。这是一种property based test