이전에 다른 이름으로이 질문을했지만 잘 설명하지 않았으므로 삭제했습니다.유닛 테스트 자원 관리 클래스의 개인 메소드
파일을 관리하는 클래스가 있다고 가정 해 보겠습니다. 의이 클래스는 특정 파일 형식을 필요로 파일을 처리하고,이 파일에 대한 작업을 수행하는 방법을 포함한다고 가정 해 봅시다 :
class Foo {
std::wstring fileName_;
public:
Foo(const std::wstring& fileName) : fileName_(fileName)
{
//Construct a Foo here.
};
int getChecksum()
{
//Open the file and read some part of it
//Long method to figure out what checksum it is.
//Return the checksum.
}
};
하는의 내가 단위 테스트에이 클래스의 일부 수 있도록하고 싶습니다 가정 해 봅시다을 그 체크섬을 계산합니다. 단위 테스트는 파일에로드하는 클래스의 부분을 테스트하는 것이기 때문에 getChecksum()
메소드의 모든 부분을 테스트하기 때문에 40 또는 50 개의 파일을 작성해야 할 수도 있습니다.
이제 클래스의 다른 위치에서 체크섬 방법을 다시 사용하고 싶습니다. 그것을 테스트하기 쉽고 복잡하기 때문에
이제class Foo {
std::wstring fileName_;
static int calculateChecksum(const std::vector<unsigned char> &fileBytes)
{
//Long method to figure out what checksum it is.
}
public:
Foo(const std::wstring& fileName) : fileName_(fileName)
{
//Construct a Foo here.
};
int getChecksum()
{
//Open the file and read some part of it
return calculateChecksum(something);
}
void modifyThisFileSomehow()
{
//Perform modification
int newChecksum = calculateChecksum(something);
//Apply the newChecksum to the file
}
};
내가 유닛 calculateChecksum()
방법을 테스트하고 싶습니다, 그리고 그것을이기 때문에 단위 테스트 getChecksum()
걱정하지 않는다 : 지금과 같이 보이도록 내가 방법을 추출 간단하고 테스트하기가 매우 어렵습니다. 그러나 이기 때문에 calculateChecksum()
을 직접 테스트 할 수 없습니다.
누구든지이 문제의 해결책을 알고 있습니까?
+1이 특정 시나리오에서 작동 할 수 있다고 가정합니다. 그러나 레지스트리 키, 파일, 파이프 등 모든 종류의 리소스 관리 클래스에서 작동하는 좀 더 일반적인 대답을 기대합니다. 죄송합니다. 질문에서 꽤 명확하지 않았습니다. ( –