2015-01-15 2 views
4

저는 현재 객체 지향 Matlab로 작성된 프로젝트에 대한 단위 테스트를 구현하고 있습니다.matlab.unittest를 사용하여 개인적인 방법을 테스트하는 방법?

디자인에서 내 테스트 클래스의 테스트 메서드에서 클래스의 개인 메서드에 액세스 할 수 없다는 의미가 있습니다.

공개하지 않고 직접 테스트 할 수있는 대안이 있습니까?

+0

다음은 유사한 질문/답변입니다 (http://stackoverflow.com/questions/25313017/how-to-make-internal-helper-functions-testable/25314333#25314333). 여기에 또 다른 http : /www.mathworks.com/matlabcentral/answers/92827-how-do-i-construct-test-cases-derived-from-the-matlab-unittest-testcase-class-for-private-methods-in) 그러나 둘 다 이 경우 인터페이스에 구현 세부 사항이 누설됩니다. 예를 들어, 하위 클래스는 더 이상 같은 이름의 메소드를 작성할 수 없으며 보호되지만 봉인되지 않으면 매우 위험 할 수있는 동작을 재정의 할 수도 있습니다. –

답변

4

직접 테스트해야하는 경우 가장 쉽게 할 일은 공개로 설정하는 것입니다.

대안으로는 보호를 설정 한 다음 보호 된 메소드를 호출하여 테스트하는 추가 공개 메소드가있는 서브 클래스를 가질 수 있습니다 (테스트중인 각 메소드에 대해 하나 일 수 있음). 보호 된 것들을 직접 호출하여).

그러나 질문의 ​​전제는 단위 테스트의 아이디어에 어긋납니다. 클래스가 제공하는 공개 인터페이스/계약서를 테스트해야합니다. 이는 공개 메소드 일뿐입니다. 공용 메서드가 잘 테스트 된 경우 모든 개인 메서드는 구현 세부 사항입니다.

일을 살펴볼 또 다른 방법은 실제로 테스트가 필요한 경우 자체 클래스로 옮길 가치가있을 수 있습니다.