GoogleTest를 사용하여 프로젝트에서 단위 테스트를 만듭니다. 나는 다음과 같은 인터페이스를 구현하는 특정 개체를 조롱하려는 : Cock에서 모의 전달하기
class IMockableObject
{
public:
IMockable();
IMockable(const IMockable &other); // copy constructor
virtual ~IMockable();
virtual int DoSomething() = 0;
std::mutex UnCopyableMember;
};
나는이 인터페이스를 상속이 개 클래스를 만들었습니다. 첫번째는 (그것이 CPP 파일 자체의 실행을 가짐) 실제 목적 :
class MockImplementation : public IMockable
{
public:
MockImplementation();
MockImplementation(const MockImplementation &other);
MOCK_METHOD0(DoSomething, int());
};
:
class MainImplementation : public IMockable
{
public:
MainImplementation();
MainImplementation(const MainImplementation &other);
virtual int DoSomething();
};
번째 하나가 거짓 (생성자의 구현은 CPP 파일에서) 인 내가 만들고있는 단위 테스트는 IMockable
의 새 인스턴스를 만든 다음 DoSomething
을 호출하는 메서드를 테스트하는 것입니다. 이 메소드를 호출하는 객체는 생성자에서 인수로 팩토리를 가져와 IMockable
을 인스턴스화합니다.
ClassToTest.cpp : 공장 얻을해야하기 때문에 이전에 만든, 내가 시험을 통과 할 것으로 예상
TEST(FactoryTest, DoSomethingIsCalled)
{
MockImplementation mock;
EXPECT_CALL(mock, DoSomething())
.Times(AtLeast(1));
auto factory = [mock]()
{
return std::make_unique<MockImplementation>(mock);
};
ClassToTest object(factory);
object.MethodToTest();
}
:
이제 내 모든 개체가 정의되어 있는지ClassToTest::ClassToTest(std::function<std::unique_ptr<IMockable>()> factory)
{
this->factory = factory;
}
void ClassToTest::MethodToTest()
{
std::unique_ptr<IMockable> object = this->factory();
object->DoSomething();
//...
}
, 여기에 테스트입니다 조롱하고 MethodToTest
으로 전화하십시오. 그러나 테스트가 실패하고 난 구글 모의에서 다음과 같은 출력을 얻을 :
GMOCK 경고 : 비 관심 모의 함수 호출 - 반환 기본 값입니다. 함수 호출 : MethodToTest()
팩토리는 모의를 가져 오지만 어설 션을 무시합니다. 뭐가 문제 야?
TEST(FactoryTest, DoSomethingIsCalled)
{
auto factory = []()
{
auto mock = std::make_unique<MockImplementation>();
EXPECT_CALL(*mock, DoSomething()).Times(AtLeast(1));
return mock;
};
ClassToTest object(factory);
object.MethodToTest();
}
귀하의 방법은 조롱 객체의 복사본을하지,하지만 원래는 기대를 가지고
복사본은 어디에 추가됩니까? – oOnez
복사본으로 복사 (첫 번째 복사본)하고 복사 생성자'std :: make_unique (모의)'(두 번째 복사본)에 의해'std :: unique_ptr'을 만듭니다. –
Jarod42