【问题标题】:Sharing data between two test cases in google test framework在谷歌测试框架中的两个测试用例之间共享数据
【发布时间】:2016-08-05 18:33:51
【问题描述】:

我正在使用谷歌测试框架测试具有随机输入数据的算法的特定实现。我想将相同的随机输入数据用于相同算法的另一个实现。我正在使用两个单独的测试用例测试这两个实现。有没有办法将随机输入数据从一个测试用例共享到另一个测试用例。

【问题讨论】:

  • 创建一个测试夹具。
  • 使用相同的RNG算法和种子?
  • @user4581301 使用相同的 RNG 算法和种子有所帮助。
  • 设计上不可能。每个测试用例应该相互隔离。此外 - 更改测试用例运行的顺序不会导致任何问题 - 这意味着如果 TEST1 在 TEST2 之前或之后运行应该始终具有相同的结果。查看 FIRST 原则以了解如何编写好的单元测试。当然,您可以通过使用全局变量来打破这种良好的编程习惯......

标签: c++ googletest


【解决方案1】:

查看https://github.com/google/googletest/blob/master/docs/advanced.md#sharing-resources-between-tests-in-the-same-test-suite中的“在同一测试用例中的测试之间共享资源”部分

遵循测试夹具类中的静态方法:

static void SetUpTestCase()

static void TearDownTestCase()

分别用于获取和释放共享资源。

当然,代表共享对象的成员变量必须定义为测试夹具类的静态成员(静态方法只能访问静态成员)。不要忘记声明这些成员的全局变量(如果你不这样声明它们,编译器会抛出错误)。

SetUpTestCase() 由 Google 测试框架在执行第一个测试之前调用,TearDownTestCase() 在执行最后一个测试之后调用。

我提到的一切都在上面的参考资料中得到了全面的描述。那里也有例子。

【讨论】:

    【解决方案2】:

    您可以按照文档中的说明使用Test Fixture

    TEST_F(test_case_name, test_name) {
     ... test body ...
    }
    

    测试装置在测试用例的运行之间保留使用SetUp() 函数创建的数据,因为它被修改了。

    【讨论】:

    • 感谢您的回答。我已经在使用 TEST_F。但是我想在两个 TEST_F 之间共享数据,有可能吗?文档说 SetUp 将实例化每个测试用例。
    猜你喜欢
    • 2018-12-21
    • 2011-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多