- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我们可以使用 INSTANTIATE_TEST_CASE_P 为同一个 TEST FIXTURE 设置两个不同的实例
最佳答案
当然。这是一个基本示例:
gtester.cpp
#include <gtest/gtest.h>
#include <string>
class my_fixture :
public ::testing::TestWithParam<std::string> {
};
INSTANTIATE_TEST_CASE_P(Colours,my_fixture,
::testing::Values("red", "green", "blue"));
INSTANTIATE_TEST_CASE_P(Shapes,my_fixture,
::testing::Values("square", "circle", "triangle"));
TEST_P(my_fixture, has_positive_size) {
auto const & val = GetParam();
ASSERT_TRUE(val.size() > 0);
}
int main(int argc, char **argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
编译:
$ g++ -std=c++11 -Wall -Wextra -c gtester.cpp
链接:
$ g++ -o gtester gtester.o -lgtest -pthread
运行:
$ ./gtester
[==========] Running 6 tests from 2 test cases.
[----------] Global test environment set-up.
[----------] 3 tests from Colours/my_fixture
[ RUN ] Colours/my_fixture.has_positive_size/0
[ OK ] Colours/my_fixture.has_positive_size/0 (0 ms)
[ RUN ] Colours/my_fixture.has_positive_size/1
[ OK ] Colours/my_fixture.has_positive_size/1 (0 ms)
[ RUN ] Colours/my_fixture.has_positive_size/2
[ OK ] Colours/my_fixture.has_positive_size/2 (0 ms)
[----------] 3 tests from Colours/my_fixture (0 ms total)
[----------] 3 tests from Shapes/my_fixture
[ RUN ] Shapes/my_fixture.has_positive_size/0
[ OK ] Shapes/my_fixture.has_positive_size/0 (0 ms)
[ RUN ] Shapes/my_fixture.has_positive_size/1
[ OK ] Shapes/my_fixture.has_positive_size/1 (0 ms)
[ RUN ] Shapes/my_fixture.has_positive_size/2
[ OK ] Shapes/my_fixture.has_positive_size/2 (0 ms)
[----------] 3 tests from Shapes/my_fixture (0 ms total)
[----------] Global test environment tear-down
[==========] 6 tests from 2 test cases ran. (0 ms total)
[ PASSED ] 6 tests.
仅运行Colours
测试:
$ ./gtester --gtest_filter=Colours/*
Note: Google Test filter = Colours/*
[==========] Running 3 tests from 1 test case.
[----------] Global test environment set-up.
[----------] 3 tests from Colours/my_fixture
[ RUN ] Colours/my_fixture.has_positive_size/0
[ OK ] Colours/my_fixture.has_positive_size/0 (0 ms)
[ RUN ] Colours/my_fixture.has_positive_size/1
[ OK ] Colours/my_fixture.has_positive_size/1 (0 ms)
[ RUN ] Colours/my_fixture.has_positive_size/2
[ OK ] Colours/my_fixture.has_positive_size/2 (0 ms)
[----------] 3 tests from Colours/my_fixture (0 ms total)
[----------] Global test environment tear-down
[==========] 3 tests from 1 test case ran. (1 ms total)
[ PASSED ] 3 tests.
仅运行 Shapes
测试:
$ ./gtester --gtest_filter=Shapes/*
Note: Google Test filter = Shapes/*
[==========] Running 3 tests from 1 test case.
[----------] Global test environment set-up.
[----------] 3 tests from Shapes/my_fixture
[ RUN ] Shapes/my_fixture.has_positive_size/0
[ OK ] Shapes/my_fixture.has_positive_size/0 (0 ms)
[ RUN ] Shapes/my_fixture.has_positive_size/1
[ OK ] Shapes/my_fixture.has_positive_size/1 (0 ms)
[ RUN ] Shapes/my_fixture.has_positive_size/2
[ OK ] Shapes/my_fixture.has_positive_size/2 (0 ms)
[----------] 3 tests from Shapes/my_fixture (0 ms total)
[----------] Global test environment tear-down
[==========] 3 tests from 1 test case ran. (0 ms total)
[ PASSED ] 3 tests.
在更接近生活的场景中:-
my_fixture
由程序员 Alice 开发,并在头文件 my_fixture.h
和(如果需要)库 lib_myfixture
中实现。
Colours
测试由程序员 Bob 在一个单独的测试套件中开发:-
colour_test.cpp
#include <my_fixture.h>
INSTANTIATE_TEST_CASE_P(Colours,my_fixture,
::testing::Values("red", "green", "blue"));
TEST_P(my_fixture, ...) {
...
}
...
构建方式如下:
$ g++ -std=c++11 -Wall -Wextra -I/my_fixture/include/path -c colour_test.cpp
$ g++ -o colour_test colour_test.o -L/my_fixture/lib/path -lmy_fixture -lgtest -pthread
Shapes
测试是由程序员 Carol 在另一个单独的项目中开发的测试套件,以相同的方式实现。
稍后
What I wanted to know is if it is possible to couple an instantiation with specific TEST_Ps... and another one coupled with another set of TEST_Ps for the same test fixture.
不,你不能那样做,因为 TEST_P(fixture,description)
被绑定(bind)到fixture
,而不是 fixture
的实例化。但考虑到任何固定装置制作两个功能相同但实例化不同的装置很简单,例如
#include <gtest/gtest.h>
#include <string>
class my_fixture :
public ::testing::TestWithParam<std::string> {
};
class colours_fixture : public my_fixture {};
class shapes_fixture : public my_fixture {};
INSTANTIATE_TEST_CASE_P(Colours,colours_fixture,
::testing::Values("red", "green", "blue"));
INSTANTIATE_TEST_CASE_P(Shapes,shapes_fixture,
::testing::Values("square", "circle", "triangle"));
TEST_P(colours_fixture, has_positive_size) {
auto const & val = GetParam();
ASSERT_TRUE(val.size() > 0);
}
TEST_P(shapes_fixture, has_positive_size) {
auto const & val = GetParam();
ASSERT_TRUE(val.size() > 0);
}
int main(int argc, char **argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
关于c++ - 使用 INSTANTIATE_TEST_CASE_P 的同一 Fixture 的不同实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52894593/
我正面临 pytest 固定装置的一个小问题,感谢您的帮助。 我有一些功能装置,如下所述。为简单起见,我没有展示实现。 @pytest.fixture() def get_driver():
我有一个现有的 pytest使用一些预定义列表来测试它们的交叉产品的测试: A_ITEMS = [1, 2, 3] B_ITEMS = [4, 5, 6] C_ITEMS = [7, 8, 9] 我还
我要传一个pytest.fixture函数到另一个 fixture 函数的 param 参数。像这样的东西: @pytest.fixture() def foo(): return "foo"
我试图避免在我的测试中重复太多的样板文件,我想以更有条理的方式重写它们。假设我有两个不同的解析器,它们都可以将文本解析为 doc。然后该文档将用于其他测试。最终目标是公开一个可以在其他测试中使用的 d
我有很多通过 pytest 管理的参数化装置。 有时,我希望使用 fixture 的测试不必担心应用参数。 是否可以制作一个参数化另一个 fixture 的 fixture ? import pyte
我有一对 fixture 用于测试具有 x-y 输入的函数。一个生成 x 值,另一个生成 y 值。测试取决于两者。 y 值也取决于 x 值。以下是设置摘要: import pytest @pytest
例子: from pytest import fixture, skip @fixture(params=['a', 'b']) def f1(request): yield request.
我的 Karma 配置文件中的文件属性是 files: [ // Program files 'public/js/init.js',
Conftest.py @pytest.fixture(scope="module") def fixture2(request): do something @pytest.fixture(
我正在使用 unittest.mock 模拟一个 API。我的界面是一个在后台使用 requests 的类。所以我正在做这样的事情: @pytest.fixture def mocked_api_an
基于此堆栈溢出:pytest fixture of fixtures 我在同一个文件中有以下代码: @pytest.fixture def form_data(): return { ...
命令行 python3 -m pytest src/spec/ --app=android conftest.py import pytest def pytest_addoption(parser)
我正在对我的代码进行一些测试,我得到了我的第一个“停止”,因为我不知道如何继续前进。在我加载灯具的 setUp() 函数中看到: public function setUp() { stati
我在两种模式下运行测试:裸 pytest 和 pytest-xdist。我有一个用模块范围定义的重型 fixture 。在这个 fixture 中,我对使用 xdist 运行测试的情况进行了一些优化:
我想在相同参数化测试的不同实例化之间共享 fixture,其中 fixture 本身也被参数化: #!/usr/bin/py.test -sv import pytest numbers_for_fi
我有一个包含多个 JSON 文件的 AWS S3 目录,这些文件用作测试输入。 我创建了一个 PyTest 模块,它使用模块范围的 fixture 下载所有 JSON 文件一次,然后运行多个测试函数
我有一个固定装置,它返回该端点名称(传入)的端点 名称是测试中设置的字符串。我在测试中每次调用端点(参数化)都搞砸了,现在我不知道如何在不每次调用端点的情况下获得相同的功能。 基本上,我只需要调用一次
如果我有两个参数化的 fixture ,我如何创建一个测试函数,首先用一个 fixture 的实例调用,然后用另一个 fixture 的实例调用? 我想创建一个以某种方式连接两个现有装置的新装置是有意
我是python的新手。我已经声明了一个装置 configure_loggers()范围为“ session ”。现在,我想在另一个 fixture 之前使用这个 fixture setup_app(
我想在另一个固定文件中实例化的固定文件中使用一个对象。类似于以下内容(不起作用): monitor_france: objecttype_id: 2 name1: i-france-1 n
我是一名优秀的程序员,十分优秀!