2012-09-15 5 views
1

내 Ray 모듈 :단위 테스트를위한 나의 옵션은 무엇입니까?

define(['Util', 'Vector3f'], function (Util, Vector3f) { 
    var Ray = {} 
    Ray.o = null; 
    Ray.d = null; 
    Ray.depth = 0; 
    Ray.mint = 0.03; 
    Ray.maxt = null; 
    return Ray; 
}); 

내 단위 테스트 :

describe(".moveAlong(Number t)", function(){ 
    it("returns a point at distance t in the direction of the ray", 
    function(){ 
    expect(4).toBe(null); //unimplemented unit test always fails 
    }); 
}); 

Ray.o은 레이의 원점입니다. Ray.d는 광선의 방향입니다. Ray.moveAlong (t)가 q = o + d * t와 같은 점 q을 반환하기를 원합니다.

유닛 테스트에 대한 나의 이해는 실제로 Ray에 원점과 방향을 제공 할 수 있도록 내 Vector 테스트 모듈에 Vector3f 모듈을 포함 시키면 실제로 통합 테스트를 수행하는 것입니다. 그러나 moveAlong (t)에서 ray.d + ray.d * t를 계산하려면 Vector3f 모듈에서 add() 및 mulScalar() 메서드가 필요합니다.

내 Vector3f 의존성 처리 옵션은 무엇입니까? 어떻게 합리적인 방법으로 스텁시킬 수 있는지는 알 수 없지만 종속성을 뽑아 내고 한 번에 한 가지 방법 만 테스트하면 단위 테스트의 요점이됩니다.

+0

어떤 종류의 마법인가? – Sebas

답변

1

단위 테스트 옵션 :

첫 번째 옵션 :
그냥, Ray.o에 대한 Vector3f 객체에

프로 Ray.d

전달합니다
을 - 쉬운.

단점 :
- 테스트에 종속성을 유지합니다.
-이 테스트를 거치지 않은 구성 요소 (Vector3f)를 업데이트하려면이 테스트를 업데이트해야 할 수 있습니다.

두 번째 옵션 :
Vector3fs 모듈의 add (Vector3f v), mulScalar (Number t) 메소드 만 구현하는 스텁 Vector3fs를 만듭니다. 참조는 형식이 없기 때문에 Javascript에서는 매우 쉽습니다. 올바른 메소드가있는 객체는 "올바른"객체를 대신 할 수 있습니다. 그래서이 프로젝트에 구두 뿔 OOP를 시도하는 것은 좋지 않다고 생각합니다.하지만이 문제에 어떻게 접근해야 할 지 잘 모르겠습니다. 다른 질문에 대한 주제입니다.

장점 :
- 뭔가 Vector3f를 나누기 경우 검사 코드에서 레이와 Vector3f 사이의 휴식 의존성, Vector3f 추가 변경이 실패한 테스트의 수를 줄인다 레이 실패 단위 테스트, 발생하지 않도록를 검사합니다 .

단점 :
- 테스트에서 더 많은 코드.
- Vector3f가 모든 단위 테스트를 통과하지만 Ray의 기능을 중단시키는 방식으로 Vector3f를 변경하면 Vector3f에 대한 종속성이 끊어져 Ray 단위 테스트에서도 인식되지 않습니다.

Vector3f가 모든 단위 테스트를 통과하면 시스템의 다른 구성 요소와 계약을 맺고 있기 때문에 Vector3f가 실행되는 상황을 보지 말아야합니다. 모든 패스를 테스트하지만 다른 구성 요소가 손상됩니다. 또한 이는 통합 수준의 문제이며 단위 수준의 문제는 아닙니다.

나는 두 번째 옵션이 갈 길이라고 생각합니다.

관련 문제