2013-05-23 1 views
0

기능 테스트를 수행하여 삼각형을 확인하려고합니다. 나는 3 개의 int 입력이있다. 세 개의 입력 변수는 각각 삼각형의 각면의 길이를 나타냅니다. 삼각형의 변의 길이는 1000보다 작거나 같아야합니다.이 메서드의 출력은 5 개의 가능한 값 중 하나입니다. 즉, 1은 스켈레톤 삼각형, 2는 이등변 삼각형, 3은 정삼각형, 4는 삼각형을 기술하지 않는 값, 범위를 벗어난 값을 나타내는 값 5.삼각형에 기능 테스트를 수행하는 방법

이것은 내가 작성한 첫 번째 테스트이지만, 맞는지 아닌지 전혀 알 수 없습니다.

public class TriangleTypeFunctionalTest { 
    @Before 
    public void setUp() throws Exception { 
    } 

    @Test 
    public void testTriangleScalene(x,y,z) { 
     if(x < 1000 and y <1000 and z< 1000){ 
      if ((x != y) and (x != z) and (y !=z)) 
       return True; 
      else 
       return False; 
     } 
     else 
      return False; 

    } 

} 

내가 어떻게 삼각형을 가지려면이

답변

0

을 수행하는 도움의 이해와 필요, 한쪽의 아이폰에 다른 두 측면

시도의 합보다 낮은이어야한다 :

if(x+y<z) //not a triangle 
if(x+z<y) //not a triangle 

... 내가 수학을 공부 한 이후

그것은 잠시왔다,하지만 트릭을해야합니다

0

삼각형을 가지려면 각면이 다른 두면의 합보다 작아야합니다. (JUnit4를 사용하는 것이 좋습니다.) (x, y, z) trey의 조건을 assertTrue 방법으로 전달해야합니다.

import static org.junit.Assert.assertTrue; 
import org.junit.Test; 

public class TriangleTypeFunctionalTest { 
    private int x; 
    private int y; 
    private int z; 

    @Before 
    public void setUp() throws Exception { 
     x = //some mock value; 
     y = //some mock value; 
     z = //some mock value; 
    } 

    @Test 
    public void testTriangleScalene() { 
     assertTrue((x < 1000 && y <1000 && z< 1000)); 
     assertTrue((x + y > z) && (x + z > y) && (y + z > x)); 
    } 
} 
+0

그는 JUnit 테스트를 작성하려고하기 때문에 assert 메소드를 사용해야하며 메소드는 'void'여야합니다. –

+0

예, 감사합니다. 처음에는 그 질문을 이해할 수 없었습니다. –

+0

그는 임의의 숫자를 던지는 것뿐만 아니라 일종의 삼각형 객체를 테스트하려고 노력해야합니다. –

1

먼저 세 개의 숫자가 삼각형의 변인 조건을 알아야합니다. 그들은 다음과 같습니다 :

// Sides a, b, c 
a + b > c 
b + c > a 
c + a > b 
a > 0 
b > 0 
c > 0 

다음으로 삼각형의 종류를 구별 할 수있는 방법이 필요합니다. 숫자 코드는 갈 길이 없습니다.

enum TriangleType { 
    EQUILATERAL, 
    ISOSCELES, 
    SCALENE, 
    INVALID, 
    OVERSIZE 
} 

다음으로, 삼각형의 측면으로 3 가지 값을 테스트하는 클래스를 작성하려고합니다. 실제로, Triangle 그 자체로 만들지 만, 테스트 기반 개발을하고 싶다면 타입 메소드를 작성하지 마십시오.

public class Triangle { 
    int a; 
    int b; 
    int c; 
    public Triangle(int a, int b, int c) {...} 
    public TriangleType type() { 
     return null; 
     // Not really written yet. 
    } 
} 

지금, 당신은 당신의 테스트가 성공할 때까지 당신은 다음 type() 편집 type()에 대한 테스트를 작성하고자합니다. 측면이 긍정적 인 것으로부터 시작합시다.

public class TypeTest { 
    @Test 
    public void negativeSideAFails() { 
     Triangle t = new Triangle(-10, 10, 20); 
     Assert.assertEquals(TriangleType.INVALID, t.type()); 
    } 
} 

측면 b와 c에 대해서도 비슷한 테스트를 작성해야합니다. assertEquals 메소드는 두 값이 동일하지 않으면 JUnit 테스트 러너가 테스트 실패로 변환되는 예외를 발생시킵니다.

편집 한 후 type 이러한 작업까지 방법 및 기타 조건에 대한 테스트를 계속 :

@Test 
    public void sideAMustBeShorterThanSumOfOtherTwo() { 
     Triangle t = new Triangle(100, 10, 20); 
     Assert.assertEquals(TriangleType.INVALID, t.type()); 
    } 

는 다음, TriangleTypes 모두를 대표하는 값에 대한 테스트를 작성.

많은 테스트가 있지만 나중에 @Parameterized 테스트에 대해 배울 때 간단하게 할 수 있습니다.

+0

큰 설명에 감사드립니다. 한 가지 언급 한 점은 triangleType 클래스가 나에게 주어 졌다는 것입니다. – codeeeeeNOT

+0

제공된 경우 사용하십시오. 그러나 열거 형은 숫자 코드보다 우수한 것입니다. 적어도 상징적 인 이름을 사용하고'Triangle'으로 작성하십시오 :'public static int EQUILATERAL = 3;'그런 다음 코드에서'Triangle.EQUILATERAL'을 사용하십시오. 실제로 6 개월 전에 작성한 코드를 언젠가 되돌아 볼 필요가 있으며 "내가 뭘하고 있었 니?"라고 말할 수있는 위치에 있기를 원하지 않을 것입니다. –