Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 测试失败-无法设置运行测试的执行上下文_C++_Unit Testing_Visual Studio 2015_Global Variables_Vs Unit Testing Framework - Fatal编程技术网

C++ 测试失败-无法设置运行测试的执行上下文

C++ 测试失败-无法设置运行测试的执行上下文,c++,unit-testing,visual-studio-2015,global-variables,vs-unit-testing-framework,C++,Unit Testing,Visual Studio 2015,Global Variables,Vs Unit Testing Framework,我试图为一组访问或修改全局变量的类编写单元测试 我需要总结的第一个全球性问题是: extern std::atomic<Foo> GlobalFoo; 我开始从事的下一个全球项目是: extern const std::unordered_map< std::vector<char>, std::vector<char>, std::hash<std::vector<char>> GlobalBar; extern c

我试图为一组访问或修改全局变量的类编写单元测试

我需要总结的第一个全球性问题是:

extern std::atomic<Foo> GlobalFoo;
我开始从事的下一个全球项目是:

extern const std::unordered_map<
    std::vector<char>, std::vector<char>, std::hash<std::vector<char>> GlobalBar;
extern const std::无序映射<
std::vector,std::vector,std::hash GlobalBar;
我想构造一个类,该类将返回指向此全局集合的共享指针

我首先写下我的测试常量:

namespace Tests
{
    // Alias
    using Collection = const std::unordered_map<
        std::vector<char>, std::vector<char>, std::hash<std::vector<char>>;

    // Global state
    const std::shared_ptr<Collection> global = 
        std::make_shared<Collection>(Framework::GlobalBar);

    TEST_CLASS(FooRetrieverUnitTests)
    {
        // TODO
    };
}
命名空间测试
{
//别名
使用Collection=const std::无序映射<
std::vector,std::vector,std::hash;
//全球国家
const std::shared_ptr global=
std::make_shared(框架::GlobalBar);
测试类(FooreRetrieverUnitTests)
{
//待办事项
};
}
但是,此时运行测试会为我的所有测试生成以下消息(即,不只是此新测试):

无法设置运行测试的执行上下文

注释掉全局允许运行所有测试

如果我将注释为
//Global state
的行移动到测试方法中,那么测试将毫无问题地运行

我调查了错误,但找不到任何适用于我的问题的东西。我怀疑错误消息掩盖了真正的问题。当我通过命令行运行测试时,我没有得到任何额外的信息。我相信这可能是由于缺少DLL造成的(尽管我发现这不太可能,因为我只是在使用标准库,没有额外的东西)

我的项目是一个静态库,我的单元测试采用DLL的形式(这是Microsoft Visual Studio的单元测试框架使用的默认方法)

除了通常的“不要使用全局变量”的咆哮(我在这个应用程序中需要一些全局变量,主要是关于路径和语言设置),我想知道是否有人能提供一些关于我遇到的问题的见解。也许我在
Tests
名称空间中复制全局集合是做错了什么,或者visualstudio的单元测试功能中存在另一个bug


代码编译时没有错误或警告,但单元测试将不会在此状态下运行。

您有解决方法吗?
namespace Tests
{
    // Alias
    using Collection = const std::unordered_map<
        std::vector<char>, std::vector<char>, std::hash<std::vector<char>>;

    // Global state
    const std::shared_ptr<Collection> global = 
        std::make_shared<Collection>(Framework::GlobalBar);

    TEST_CLASS(FooRetrieverUnitTests)
    {
        // TODO
    };
}