单元测试:我在单元测试方法时使用其他方法是否正确?

时间:2017-07-09 09:10:18

标签: unit-testing tdd googletest

据我所知,应该分别对每个公共API进行单元测试。但是,我遇到过一种情况,我没有找到一种明确的方法来单独测试每个API,如下例所示:

class MyStorage {
private:
    std::vector<int> int_vec_;

public:
    bool insert_int(int value);
    int get_value_at(int idx);
}

我使用了GooogleTest框架并编写了单元测试,如下所示:

int int_tenth(int x) { return x * 10; }

TEST_F(MyStorageTest, insert_int) {
    for(int i = 0; i < 10; i++) {
        int value = int_tenth(i);
        bool ret = my_storage.insert_int(value);
        ASSERT_TRUE(ret);
    }
}

TEST_F(MyStorageTest, get_value_at) {
    for(int i = 0; i < 10; i++) {
        int value = int_tenth(i);
        my_storage.insert_int(value);
    }

    for(int i = 0; i < 10; i++) {
        int expected_value = int_tenth(i);
        int value = my_storage.get_value_at(i);
        ASSERT_EQ(expected_value, value);
    }
}

我做对了吗?如果没有,我该如何为这个例子进行单元测试?

1 个答案:

答案 0 :(得分:1)

我认为这看起来很好&#34;好的&#34;。您的测试用例正在运行两个API - 是的,您需要使用insert方法来测试get方法。

缺少什么:极端情况,特别是对于获取。喜欢:有负面的indixes的测试用例。或者索引无效。此类测试应导致某些错误 - 您可能希望确保显示预期的错误(例如异常)。

除此之外,您可能希望查看基于QickCheck构思的库(测试框架运行随机测试以查找您为生产代码指定的属性的违规行为)。