2014-10-10 1 views
0

나는 간단한 클래스가 있습니다junit 및 Eclemma를 사용하여 테스트 적용 범위를 늘리는 방법은 무엇입니까?

public class NPP { 

    // inputs 
    public int m__water_pressure = 0; 
    public boolean m__blockage_button = false; 
    public boolean m__reset_button = false; 

    public int old_m__pressure_mode = 0; 
    public boolean old_m__reset_button = false; 
    public boolean old_m__blockage_button = false; 
    public int old_m__water_pressure = 0; 

    // outputs 
    public int c__pressure_mode = 0; 
    public boolean c__the_overriden_mode = false; 
    public int c__the_safety_injection_mode = 0; 

    public int p__pressure_mode = 0; 
    public boolean p__the_overriden_mode = false; 
    public int p__the_safety_injection_mode = 0;  

    public void method__c__pressure_mode() { 
     if (m__water_pressure >= 9 && old_m__water_pressure < 9 && c__pressure_mode == 0) { 
      p__pressure_mode = 1; 
     } else if (m__water_pressure >= 10 && old_m__water_pressure < 10 && c__pressure_mode == 1) { 
      p__pressure_mode = 2; 
     } else if (m__water_pressure < 9 && old_m__water_pressure >= 9 && c__pressure_mode == 1) { 
      p__pressure_mode = 0; 
     } else if (m__water_pressure < 10 && old_m__water_pressure >= 10 && c__pressure_mode == 2) { 
      p__pressure_mode = 1; 
     } 
    } 

    public void method__c__the_overriden_mode() { 
     if (m__blockage_button == true && old_m__blockage_button == false && m__reset_button == false && !(c__pressure_mode==2)) { 
      p__the_overriden_mode = true; 
     } else if (m__reset_button == true && old_m__reset_button == false && !(c__pressure_mode==2)) { 
      p__the_overriden_mode = false; 
     } else if (c__pressure_mode==2 && !(old_m__pressure_mode==2)) { 
      p__the_overriden_mode = false; 
     } else if (!(c__pressure_mode==2) && old_m__pressure_mode==2) { 
      p__the_overriden_mode = false; 
     } 
    } 

    public void method__c__the_safety_injection_mode() { 
     if (c__pressure_mode == 0 && c__the_overriden_mode == true) { 
      p__the_safety_injection_mode = 0; 
     } else if (c__pressure_mode == 0 && c__the_overriden_mode == false) { 
      p__the_safety_injection_mode = 1; 
     } else if (c__pressure_mode == 1 || c__pressure_mode == 2) { 
      p__the_safety_injection_mode = 0; 
     } 
    } 

} 

을 그리고 난이의 JUnit 클래스를 작성했습니다 : 나는 몇 가지 테스트를 작성하고 코드 범위의 100 %를 커버하도록 요청했습니다

import static org.junit.Assert.*; 

import org.junit.Test; 


public class NPPTest { 

    @Test 
    public void testMethod__c__pressure_mode() { 
     NPP npp = new NPP(); 
     npp.m__water_pressure = 3; 
     npp.old_m__water_pressure = 5; 
     npp.c__pressure_mode = 2; 
     npp.method__c__pressure_mode(); 
     assertEquals(1, npp.p__pressure_mode);   
    } 

    @Test 
    public void testMethod__c__the_overriden_mode() { 
     NPP npp = new NPP(); 
     npp.m__blockage_button = false; 
     npp.old_m__blockage_button = true; 
     npp.m__reset_button = false; 
     npp.method__c__the_overriden_mode(); 
     assertFalse(npp.p__the_overriden_mode); 

    } 

    @Test 
    public void testMethod__c__the_safety_injection_mode() { 
     NPP npp = new NPP(); 
     npp.c__pressure_mode = 2; 
     npp.c__the_overriden_mode = false; 
     npp.method__c__the_safety_injection_mode(); 
     assertEquals(1, npp.p__the_safety_injection_mode); 

    } 

} 

합니다. 그러나 그것은 정확히 무엇을 의미합니까? 내가 어떻게 이걸 얻을 수 있니? 나는 Eclemma를 달렸고 나는 46 % 밖에 얻지 못했다.

답변

3

코드 적용 범위가 100 % 인 경우은 모든 코드 행이 테스트 대상임을 의미합니다.

즉, 테스트 코드는 작성된 모든 것을 호출하고 예상대로 작동하는지 확인해야합니다.

귀하의 경우, 모든 메소드를 호출해야하며 모든 if-else를 테스트해야한다는 것을 의미합니다.


100 %의 코드 커버리지 매우 섹시하더라도, 무엇을 가장 중요한 것은 테스트 제품군의 품질입니다.

모든 15 % 왼쪽, 일부 게터/세터, 확인 쓸모가 그 외부 API에 대한 호출 등 테스트하는 것은 매우 매우 어렵 글루 코드의 경우 코드 커버리지 완벽 근처에있을 85 % . 어떤 코드를 테스트 할 수 있고 테스트해야하는지, 앱에 구멍 (및 폭탄)을 남기고 있다는 것을 모른 채 남겨 둘 수있는 코드는 무엇인지 파악하는 것은 당신에게 달려 있습니다.

+0

그럼 테스트를 어떻게 작성해야합니까? 모든 테스트 방법에서 모든 가능한 결과에 대해 assertEquals 또는 assertFalse를 넣어야합니까? –

관련 문제