当我使用以下过程运行单元测试时,诸如“CString a;”之类的简单声明发生了异常。 环境是Visual Studio 2019,语言是C++。
SampleClass.h
#pragma once
class _DllExport SampleClass
{
public:
SampleClass(void);
virtual ~SampleClass(void);
char* sampleMethod();
protected:
private:
};
示例类.cpp
#include "pch.h"
#include <string.h>
#include "SampleClass.h"
SampleClass::SampleClass(void) {
}
SampleClass::~SampleClass(void) {
}
char* SampleClass::sampleMethod() {
CString a;
return "test";
}
#define _DllExport __declspec( dllexport )
测试.cpp
#include "pch.h"
#include "..\MFCApplication1\SampleClass.h"
TEST(TestCaseName, TestSampleMethod) {
SampleClass sampleClass;
char* value = sampleClass.sampleMethod();
EXPECT_TRUE(strcmp(value, "test") == 0);
}
#define _DllExport __declspec( dllimport )
Exception thrown at 0x80000142 in Sample-Test1.exe: 0xC0000005: Access violation executing location 0x80000142.
unknown file: error: SEH exception with code 0xc0000005 thrown in the test body.
使用几乎默认设置创建的项目无法通过简单的测试。我还需要配置其他东西吗? 最终我想用下面的代码毫无问题地完成测试。 所有这些在运行单元测试时都会引发异常。
将“CString”或“std::vector
对“CString”或“std::vector
使用标准库函数,例如“memset”和“vsprintf_s”
我尝试了以下版本。 VS2019 专业版(v16.11、v16.7)和 VS2022。 但是,所有版本都没有解决该问题。 希望能在VS2019 Professional环境下运行。
我不仅尝试了Google Test,还尝试了本机单元测试项目,但没有解决。
从 MFC 库模板项目而不是 MFC 应用程序创建 MFC DLL。
MFClibrary1.h
#include "resource.h" // main symbols
class __declspec(dllexport) SampleClass
{
public:
SampleClass(void);
virtual ~SampleClass(void);
char* sampleMethod();
protected:
private:
};
MFClibrary1.cpp
#include "pch.h"
#include "framework.h"
#include "MFCLibrary1.h"
SampleClass::SampleClass(void) {
}
SampleClass::~SampleClass(void) {
}
char* SampleClass::sampleMethod() {
CString a;
return "test";
}