유일한 실제 논리는 외부 API의 쿼리 구문에 있습니다. API를 쿼리하는지 여부를 테스트하고 싶지 않고 올바른 데이터가 반환되는 방식으로 쿼리하는지 테스트하고 싶습니다. 예를 들어 일부 의사 코드는 다음과 같습니다.
function retrieve_related_data(id)
{
query = "[potentially long, syntactically complex query that
uses param id to get some data]";
results = api_wrapper.query(query);
return results;
}
API를 구성한보다 구체적인 예 :
function retrieveLifeSupportingObjectsWithinRegion(id)
{
query = "
within region(" + id + ") as r
find objects matching hydration>0 and temp_range has 75
send name, id, relative(position, r)
";
results = astronomicalObjectApiWrapper.query(query);
return results;
}
쿼리는 API에 대한 구문 사용자 정의이며 복잡하며 동일하거나 유사한 결과를 얻는 여러 가지 방법이 있습니다. 이 기능의 목적은 식별 된 데이터를 얻는 것이 아니라 식별 된 id
데이터와의 퍼지 관계를 기반으로 다른 데이터의 하위 집합을 찾는 것 id
입니다. 다른 요구 사항은 id
시스템에 관계없이 항상 동일 하지만 시스템이 수정되면 시간이 지남에 따라 변경 될 수 있습니다. 예를 들어, 예제 api가 중력 정보에 대한 지원을 추가 한 경우 결과를 구체화하기 위해 중력을 사용하도록 쿼리를 변경하려고 할 수 있습니다. 또는 온도 범위를 확인하는 더 효율적인 방법을 제안했지만 결과는 변경되지 않습니다.
테스트하려는 것은 주어진 입력에 id
대해 올바른 데이터 세트가 반환 된다는 것입니다 . 누군가가 쿼리를 엉망으로 만들면 더 이상 올바른 데이터를 반환하지 않으므로 쿼리를 엉망으로 id
만들지 만 사람들이 쿼리를 수정하지 않고도 수정 할 수 있기를 원합니다. 시험.
내가 고려한 옵션 :
API를 스텁 할 수는 있지만 너무 간단합니다 (
id
질의가 쿼리에 있는지 확인한 다음 예상 데이터 세트가있는 경우 또는 예기치 않은 세트가 아닌 경우)를 반환하고 너무 취약합니다 (쿼리 문자열이 함수에있는 내용) 또는 너무 복잡한 (사용 된 쿼리가 구문 상 올바른지 확인 하고 올바른 데이터가 리턴 되는지 확인 )실제 API에 쿼리를 제출할 수는 있지만 테스트 시스템의 제어 범위를 벗어나 외부 시스템의 데이터가 변경되면 시간이 지남에 따라 예상 결과가 변경 될 수 있습니다.
나는 가지고있는 데이터를 제어하기 위해 실제 API의 테스트 설치를 설정할 수 있지만 많은 노력이 필요합니다.
나는 2 번에 기대어 자주 실행되지 않는 통합 테스트를 더 만들고 외부 시스템의 데이터 변경이 테스트를 중단하는 빈도를 확인합니다. 지금은 이것이 가장 간단하다고 생각하지만, 내가 생각하지 않는 대안이 있거나이 문제를 해결할 더 좋은 방법이 있는지 궁금합니다. 모든 조언을 부탁드립니다.