小编Chr*_*sen的帖子

如何在 Visual Studio 中使用 GoogleMock?

这将是一个自我回答的常见问题解答式问题。请参阅下面的答案。

使用 Visual Studio 2017/2019 设置新的Google Test 项目并开始编写测试非常容易(只要您不介意使用旧版本的 GoogleTest 版本)。

但是如何使用 GoogleMock 呢?你会认为自从谷歌前一段时间合并了 gtest/gmock 后,这会起作用。只是#include "gmock/gmock.h"嘲笑。但是不,模板自动添加的GoogleTest NuGet 包根本不包含该gmock文件夹。

尝试添加第二个 GoogleMock NuGet 包会导致多个问题,例如 gtest/gmock 版本不匹配、包含路径重叠等。

将 Microsoft GoogleTest NuGet 包替换为来自 Google 的包会导致链接错误:

MSVCRTD.lib(exe_main.obj) : error LNK2019: unresolved external symbol _main referenced in function "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ)
Run Code Online (Sandbox Code Playgroud)

那么目前在 Visual Studio 中设置 GoogleTest/GoogleMock 的推荐(也是最不痛苦的)方式是什么?应该能够通过测试资源管理器发现、运行和调试测试。

c++ googletest visual-studio googlemock

13
推荐指数
1
解决办法
4034
查看次数

两个独立的进程共享相同的相机源 OpenCv

我有两个单独的进程,它们同时使用 VideoCapture 来获取网络摄像头图像流。有没有办法对多个进程使用相同的VideoCapture(为了有效地节省资源)?

我正在考虑使用 mmap 将当前图像从一个进程传输到另一个进程,但我认为有更好的方法。有谁知道如何在 Opencv 中与两个进程共享相同的视频源?

此外,共享相同的视频捕获在计算上是否值得?或者是否有两个进程不断获得网络摄像头图像在资源方面更好?

谢谢你的任何建议。

c++ python opencv

6
推荐指数
1
解决办法
3887
查看次数

如何将 Google Mock 与 CppUnitTestFramework 结合使用

TL;DR: 您可以使用 GMock 向 Microsoft 本机 C++ 单元测试添加模拟功能。详情请参阅下面我的回答。


我想开始向我现有的一组本机单元测试添加模拟。这些测试是使用 Microsoft 的CppUnitTestFramework框架编写的,该框架不支持模拟。我真的不想将整个测试套件转换为另一个框架只是为了添加一些模拟。

Google 的GMock框架似乎提供了我需要的一切,并且文档表明它可以与gtest. 因此,根据像这样的博客文章中的建议,我创建了几个单元测试。

    TEST_MODULE_INITIALIZE(ModuleInitialize)
    {
        // Enable google mock
        GTEST_FLAG(throw_on_failure) = true;
        int argc = 0;
        TCHAR **argv = nullptr;
        InitGoogleMock(&argc, argv);
    }

    TEST_CLASS(GMockTests)
    {
    public:
        MockTestClass _mockObj;

        TEST_METHOD(Method1_ParamIsOne_Method2CalledWithOne)
        {
            EXPECT_CALL(_mockObj, Method2(1)).Times(1);
            _mockObj.Method1(1);
        }

        TEST_METHOD(Method1_ParamIsZero_IntentionallyFail)
        {
            // Expectation will fail
            EXPECT_CALL(_mockObj, Method2(1)).Times(1);
            _mockObj.Method1(0);
        }

    };
Run Code Online (Sandbox Code Playgroud)

结果并不令人满意。期望确实有效(第一个方法通过),但如果任何期望失败,则整个运行将中止,测试输出中仅显示以下无用消息:

[3/27/2019 11:39:17 AM Error] The active test run was aborted. Reason: 
[3/27/2019 11:39:17 AM Informational] …
Run Code Online (Sandbox Code Playgroud)

c++ unit-testing visual-c++ googlemock microsoft-cpp-unit-test

4
推荐指数
1
解决办法
3809
查看次数

如何使用 Visual Studio CppUnitTestFramework 初始化测试变量

我正在编写一个机器人控制器类Controller,其中我为 4 个可控电机中的每一个使用一个Axis结构体。

对于每个测试,我想重置所有内容,因此我在类中创建了一个指针,在每个测试方法之前将其更改为新的控制器。初始化在 TEST_METHOD_INITIALIZE 中工作正常,但是一旦调用任何 TEST_METHOD,程序似乎会重置轴指针。

感谢您的帮助!

编辑:经过进一步分析,我得出的理论是,初始化的 Axis 对象 Axis init_mx 在方法完成后将被删除。

Edit2:我认为这是一个稍微复杂一点的问题,如下所示:Pointer to local variable in C++ 尽管如此,我没有找到一种方法来重置每个方法的 Axis 变量,而不实际重置其中的每个变量。

using namespace Microsoft::VisualStudio::CppUnitTestFramework;
...
namespace UnitTest
{

    TEST_CLASS(UnitTestController)
    {
    public:
        Controller* controller;
        struct Axis *mx, *my, *mz, *mg;

        TEST_METHOD_INITIALIZE(methodName)
        {
            Axis init_mx(50), init_my(50), init_mz(50), init_mg(5);         
            mx = &init_mx;
            my = &init_my;
            mz = &init_mz;
            mg = &init_mg;
            Controller init_controller(mx, my, mz, mg);
            controller = &init_controller;
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

        }
        ...
        TEST_METHOD(id_3_next_mode)
        {
            mx->position = 5; 
            controller->getAxisPositionMx(); …
Run Code Online (Sandbox Code Playgroud)

c++ cppunit visual-c++ microsoft-cpp-unit-test

2
推荐指数
1
解决办法
3390
查看次数