클래스의 유닛 테스트에서 빈 생성자를 명시 적으로 호출하여 클래스 변수를 선언하고 인터페이스에 대한 참조를 제외한 함수로 전달하려고합니다. 선언하고있는 유형의 컴파일러가 오류를 생성합니다. 명시 적 생성자를 호출하지 않고 선언하면 함수는이를 받아들입니다. 컴파일러가 나에게 전화를 허용하지 않습니다 왜에 의해 혼란 스러워요컴파일 오류 : 객체 참조를 사용하는 함수 매개 변수가 생성 된 객체에 혼동 됨
error: no matching function for call to `CClassUnderTest::Run(CTestController (&)())' error: candidates are: unsigned int CClassUnderTest::Run(IController&)
:
이//classundertest.h
class IController;
class CClassUnderTest
{
public:
CClassUnderTest() {}
virtual ~CClassUnderTest() {}
unsigned int Run(IController & controller);
};
//testclassundertest.h
#include "UnitTest++.h"
#include "classundertest.h"
#include "icontroller.h"
class CTestController : public IController
{
public:
CTestController() : IController() {}
virtual ~CTestController() {}
virtual void Play(unsigned int i) {}
};
struct CClassUnderTestFixture
{
CClassUnderTest classUnderTest;
};
TEST_FIXTURE(CClassUnderTestFixture, RunTest)
{
CTestController controllerA;
CHECK_EQUAL(classUnderTest.Run(controllerA), 105U);
CTestController controllerB();
CHECK_EQUAL(classUnderTest.Run(controllerB), 105U);
}
컴파일러는 controllerB이 생성자의 참조입니다 믿고
아래 코드를 참조하십시오 생성자가 controllerB를 인스턴스화 할 때, 특히 프로덕션 코드가 이걸로 괜찮 으면?