使用Visual Studio 2012本机单元测试时,使用共享指针时无法编译代码。
我的代码:
#include "stdafx.h"
#include "CppUnitTest.h"
#include "ParameterTest.h"
using namespace Microsoft::VisualStudio::CppUnitTestFramework;
using namespace MyParameter;
namespace MyParameterTests
{
TEST_CLASS(MyParameterTests)
{
public:
TEST_METHOD(CheckParametersWithPathReturnsNotNull)
{
//Arrange
Parameter parameter = Parameter();
//Act
std::shared_ptr<std::string> actual = parameter.CheckParameters("C:\\Parameter.db");
//Assert
Assert::IsNotNull(actual, L"Should not return null", LINE_INFO());
}
};
}
编译器错误:
2&gt; ------ Rebuild All started:Project:MyParameterTests,Configuration:Debug Win32 ------ 2 - ; stdafx.cpp 2 - ; ParameterTestTests.cpp 2&gt; c:\ users \\ documents \ visual studio 2012 \ projects \ myparametertests \ parametertests.cpp(26):error C2784:'void Microsoft :: VisualStudio :: CppUnitTestFramework :: Assert :: IsNotNull(const T *,const wchar_t *,const Microsoft :: VisualStudio :: CppUnitTestFramework :: __ LineInfo *)':无法从'std :: shared_ptr&lt; _Ty&gt;'中推断'const T *'的模板参数 2 - ;同 2 - ; [ 2 - ; _Ty =的std :: string 2 - ; ] 2 - ; c:\ program files(x86)\ microsoft visual studio 11.0 \ _vc \ unittest \ include \ cppunittestassert.h(259):参见'Microsoft :: VisualStudio :: CppUnitTestFramework :: Assert :: IsNotNull'的声明
答案 0 :(得分:8)
你应该替换
Assert::IsNotNull(actual, L"Should not return null", LINE_INFO());
与
Assert::IsNotNull(actual.get(), L"Should not return null", LINE_INFO());
实际上,断言需要一个指针来检查它是否为空,但智能指针严格来说不是指针(它是管理指针的对象)。