뷰라고 할 것이 많은이 당신 해야하지 단위 테스트 하는 API의 내부, 단지 대중 행동. 헤더 gtest/gtest_prod.h
에 정의되어
FRIEND_TEST(TestCaseName, TestName)
: 당신은 어쨌든 을하기로 결정하면, googletest 방법 우리는 매크로를 사용할 수 있습니다.
Formatter.h
#include "gtest/gtest_prod.h"
#include <string>
class Formatter
{
FRIEND_TEST(t_Formatter_setFormat, t_formatPatternSetCorrect);
public:
Formatter(){};
void setFormat(std::string format)
{
formatPattern = format;
}
// Methods, methods...
protected:
std::string formatPattern;
};
테스트 러너
#include "Formatter.h"
#include "gtest/gtest.h"
#include <string>
TEST(t_Formatter_setFormat, t_formatPatternSetCorrect) {
Formatter f;
f.setFormat("A%Format%Pattern");
EXPECT_EQ(f.formatPattern,"A%Format%Pattern");
}
int main(int argc, char **argv)
{
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
당신이 생각 하듯이,
: 여기
는 클래스
Formatter
이 적용 예제 테스트 주자
FRIEND_TEST(t_Formatter_setFormat, t_formatPatternSetCorrect);
은 테스트를 방금 Formatter
클래스의 친구로 만들어서 보호 된 및 비공개 멤버에 액세스 할 수 있습니다.
여기에 표시된 해결책은 에 gtest_prod.h
을 넣고 Formatter.h
에 넣어야한다는 의미에서 방해가됩니다. 그러나 gtest_prod.h
그 자체는 입니다. 여기에 the code 입니다. 에 의존하지 않고이 헤더를 소프트웨어 배포에 포함 할 수 있습니다. googletest를 전체 배포본에 묶을 필요가 없습니다.
Further reading
당신이 얻을 전화 값을 확인은, 당신은 설정 호출과 다른 시간에 얻을 그 값을 비교. 값이 예상대로 변경되면 작동합니다. – Theolodis
하지만 (내 예제처럼) getter 메소드가 없다면 어떻게 될까요? – Nowax
당신은 단지 하나를 씁니까? 어쨌든 그것을 사용하지 않는다면 내부 사적인 변수의 목적은 무엇입니까? 그리고 만약 당신이 그것을 사용한다면 그것은 예상 된 변화가 일어 났는지를 확인할 수 있도록 아마도 어떤 결과를 바꿀 것입니다. – Theolodis