TotT: 인터페이스 테스트하기
원문: https://testing.googleblog.com/2008/07/tott-testing-against-interfaces.html (Translated by Google Gemini)
부족함에 대한 지속적인 느낌을 억누르기 위해, 당신은 공학 분야의 진정한 통과 의례인 자신만의 행성 파괴 광선총을 만드는 데 시간을 들였습니다. 축하합니다. 그리고 당신은 매우 자랑스러워했지만, 그 다음 주말에 이워크1 해설이 포함된 한정판 스타워즈 3부작을 구매하여 데스스타2가 알데라안3을 파괴하는 것을 보고 잘못된 결정을 내렸다는 것을 깨달았습니다. 당신의 행성 파괴 광선총은 파란색 레이저를 가지고 있지만, 녹색 레이저가 훨씬 더 멋있어 보입니다. 하지만 라디오셱4에 가서 기존의 파괴 광선총에 끼울 수 있는 녹색 레이저를 사는 것은 간단한 문제가 아닙니다. 녹색 레이저를 가지려면 처음부터 다른 행성 파괴 광선총을 만들어야 할 것입니다. 두 개의 파괴 광선총을 소유하는 것이 하나보다 이웃들의 질투심을 더 자극할 것이므로 당신에게는 괜찮습니다.
두 행성 파괴 광선총은 다양한 다른 오싹할 정도로 멋진 기술과 상호 운용되어야 하므로, 동일한 Java API를 내보내는 것이 당연합니다.
public interface PlanetaryDeathRay {
public void aim(double xPosition, double yPosition);
public boolean fire(); /* 반란군 기지가 단투인에 있다고 그녀가 말하면 이것을 호출합니다 */
}
public class BlueLaserPlanetaryDeathRay
implements PlanetaryDeathRay { /* 여기에 구현 */ }
public class GreenLaserPlanetaryDeathRay
implements PlanetaryDeathRay { /* 여기에 구현 */ }
옴니크론 페르세이 VIII 대신 옴니크론 페르세이 VII를 파괴하는 것과 같은 큰 오작동이 없도록 두 파괴 광선총을 테스트하는 것이 중요합니다. 동일한 테스트를 두 구현에 대해 실행하여 동일한 동작을 보이는지 확인하고 싶습니다. 이는 어떤 PlanetaryDeathRay 구현에 대해서도 실행되는 테스트를 한 번만 정의하면 쉽게 할 수 있습니다. junit.framework.TestCase
5를 확장하는 다음 추상 클래스를 작성하는 것으로 시작하십시오.
public abstract class PlanetaryDeathRayTestCase
extends TestCase {
protected PlanetaryDeathRay deathRay;
@Override protected void setUp() {
deathRay = createDeathRay();
}
@Override protected void tearDown() {
deathRay = null;
}
protected abstract PlanetaryDeathRay createDeathRay();
/* 테스트할 PlanetaryDeathRay를 생성합니다 */
public void testAim() {
/* deathRay.aim()에 대해 구현 독립적인 테스트를 여기에 작성합니다 */
}
public void testFire() {
/* deathRay.fire()에 대해 구현 독립적인 테스트를 여기에 작성합니다 */
}
}
setUp
메서드가 추상 createDeathRay
메서드에서 테스트할 특정 PlanetaryDeathRay
구현을 가져오는 것을 주목하십시오. 서브클래스는 완전한 테스트를 생성하기 위해 이 메서드만 구현하면 됩니다. 상속받은 testAim
및 testFire
메서드는 실행될 때 테스트의 일부가 됩니다.
public class BlueLaserPlanetaryDeathRayTest
extends PlanetaryDeathRayTestCase {
protected PlanetaryDeathRay createDeathRay() {
return new BlueLaserPlanetaryDeathRay();
}
}
이 클래스에 새로운 테스트를 쉽게 추가하여 BlueLaserPlanetaryDeathRay
에 특정한 기능을 테스트할 수 있습니다.
-
“스타워즈: 제다이의 귀환” 에서 등장하는 외계 종족. 엔도의 달의 숲 지역에서 서식하는 포유류, 정확히는 설치류형 종족이다. 작은 곰이 두 발로 걸어다니는 것처럼 생겼고, 키는 약 1미터 정도로 단신이다. 문명 수준은 말 그대로 구석기시대 수준 수렵채집민 부족 정도로, 함정이나 창이나 활 따위로 사냥을 하며 살아간다. 그나마 투석기가 있는걸보니 수학적 지식은 뛰어난 것 같다. ( 인용: https://namu.wiki/w/%EC%9D%B4%EC%9B%8C%ED%81%AC ) ↩︎
-
데스스타는 스타워즈 시리즈에 등장하는 행성 파괴 무기이다. 공포에 의한 지배라는 은하 제국의 통치 이념 타킨 독트린에 최적화된 병기이며, 현재까지 스타워즈 캐넌에 등장한 병기 중 두 번째[3]로 강력한 위력을 지녔다. 그리고 대중매체에서 가장 유명한 플래닛 킬러로 꼽힌다. ( 인용: https://namu.wiki/w/%EC%A3%BD%EC%9D%8C%EC%9D%98%20%EB%B3%84?from=%EB%8D%B0%EC%8A%A4%EC%8A%A4%ED%83%80 ) ↩︎
-
스타워즈에 등장하는 알더란(Alderaan)은 레아 오르가나 공주의 고향으로, 무기를 갖지 않을 만큼 평화롭고 아름다운 행성이었지만 제국의 슈퍼무기 ‘데스스타’에 의해 은하계 최초로 파괴되는 비극을 맞이한 행성입니다. ↩︎
-
‘라디오셱(Radio Shack)‘은 스타워즈 오리지널 3부작 제작 당시, 루크 스카이워커의 통신기(컴링크)와 같은 미래적인 소품을 만들기 위해 제작진이 부품을 구매했던 미국의 실제 전자제품 판매점 이름입니다. 이는 저예산 환경에서 창의적인 방식으로 세계관을 구축했던 당시의 재미있는 일화로 팬들 사이에서 회자되는 용어입니다. ↩︎
-
jUnit 3.x 시절 사용하던 클래스로
junit.framework.TestCase
는 더 이상 최신 JUnit (JUnit 5)의 일부가 아니며, JUnit 5를 사용한다면org.junit.jupiter.api
패키지의 어노테이션과Assertions
클래스를 사용하여 테스트를 작성해야 합니다. ↩︎