据我所知,应该分别对每个公共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);
}
}
我做对了吗?如果没有,我该如何为这个例子进行单元测试?
答案 0 :(得分:1)
我认为这看起来很好&#34;好的&#34;。您的测试用例正在运行两个API - 是的,您需要使用insert方法来测试get方法。
缺少什么:极端情况,特别是对于获取。喜欢:有负面的indixes的测试用例。或者索引无效。此类测试应导致某些错误 - 您可能希望确保显示预期的错误(例如异常)。
除此之外,您可能希望查看基于QickCheck构思的库(测试框架运行随机测试以查找您为生产代码指定的属性的违规行为)。