Junit은 Erich Gamma와 Kent Beck이 작성한 회귀 테스트 프레임 워크입니다. Junit Test는 프로그래머 테스트, 즉 흰색 상자 테스트입니다. 프로젝트 홈페이지 : http://www.junit.org/
Junit을 사용할 때는 주로 TestCase 카테고리를 상속하여 테스트 케이스를 작성하고 TestXXX () 이름을 사용하여 단위 테스트를 작성합니다.
Junit과 함께 테스트를 작성 해야하는 세 가지가 있습니다.
1. Import 문은 Junit.framework의 모든 클래스를 소개합니다.*.
2. 확장 성명서를 사용하면 클래스가 테스트 케이스에서 상속 될 수 있습니다.
3. super (string)를 호출하는 생성자.
기능적 수학
패키지 com.zj.c01; public class mathtool {public static int gcd (int num1, int num2) {int r = 0; while (num2! = 0) {r = num1 % num2; num1 = num2; num2 = r; } return num1; }}테스트 클래스 MathTooltest
패키지 com.zj.c01; import junit.framework.testcase; 공개 클래스 MathToolTest는 testcase {public mathtooltest (문자열 이름) {super (name); } public void testgcd () {assertequals (5, mathtool.gcd (10, 5)); }} Junit을 사용하여 예외를 테스트 할 때 가장 쉬운 방법은 시도를 사용하는 것입니다. 우리는 다음과 같은 조건을 주장해야합니다.
1. 실제로 던져진 예외 2. 클래스 유형의 예외 유형 3. 특정 유형의 예외가 발생합니다. 일반적으로 예외의 메시지 속성에 포함 된 문자열의 결정을 확인하십시오. 따라서 다음과 같은 일반적인 코드를 작성할 수 있습니다.
@test public void testbizexception () {try {password.validate ( "123"); 실패 ( "예외가 발생하지 않음"); } catch (예외 예) {asserttrue (ex instanceof bizexception); asserttrue (ex.getMessage (). 포함 ( "error")); }} 여기서 테스트 된 방법은 password.validate () 메소드가 해당 예외를 던지는 지 여부입니다. 시도에서 실패 ( "예외가 발생하지 않음")는 여기서 누락되지 않습니다.
코드 라인, 그렇지 않으면 테스트중인 방법에 예외가 발생하지 않으면이 유스 케이스가 전달되며 기대하는 것은 예외를 던지는 것입니다.
Junit 4에서는 이와 같은 방법 예외를 테스트 할 필요가 없습니다. 이것은 또한 예상 예외가 실행되는지 여부를 결정할 수 있지만 여전히 단점이 있습니다. 당신은 그것을 비교 한 후에 알게 될 것입니다. Junit은 시도에서 어설 션 실패에 대한 자세한 이유를 보여줄 수 없습니다 ... 캐치 방법.
Junit 4 이후 예외를 테스트하는 방법을 살펴 보겠습니다. @test (execpted = exception.class) 주석 만 사용하십시오. 다음 코드를 참조하십시오.
@test (예상 = bizexception.class) public void testbizexception () {password.validate (null); }
테스트중인 방법에 bizexception 유형이 발생하면 어설 션이 성공적입니다. 그건 그렇고, @test (예상 = bizexception.class)는 예외 유형 만 결정할 수 있으며 예외에 대한보다 구체적인 정보를 주장 할 수있는 해당 주석이 없으며, 즉, 예외의 메시지 속성을 결정할 수 없습니다.
그런 다음 때로는 메소드에서 하나의 유형을 여러 번 제외 할 수 있지만 그 이유는 다릅니다. 즉, 예외의 메시지 정보가 다릅니다. 예를 들어, bizexception이 발생하면 다음 두 가지 예외가 있습니다.
New BizeXception ( "비밀번호는 6 글자 이상을 포함해야합니다.") New BizeXception ( "15 글자 미만")
예외 메시지를 주장하는 방법이 필요합니다. 이러한 이유로 Junit 4.7 이후 우리는 더 완벽한 선택을 제공했습니다. 이것은 다음 코드입니다.
@rule public expectexception exportex = expectexception.none (); @test public void testbizexception ()는 invalidpasswordexception {explicex.expect (bizexception.class)를 던졌습니다. exportex.expectmessage ( "필수"); password.validate ( ""); } 위의 코드는 다음에 중점을 두어야합니다.
1. @rule 주석이있는 예상 예상 변수 선언, 공개해야합니다.
2. @test에서는 @test (예상 = bizexception.class)로 쓸 수 없으며, 그렇지 않으면 올바르게 테스트 할 수 없습니다. 즉, 테스트 방법의 @Test (expection = bizexception.class) 및 exportex.expectxxx () 메소드는 동시에 공존 할 수 없습니다. 3. exportex.expectmessage ()의 매개 변수는 일치자 또는 하위 문자열이므로 정규 표현식을 사용하여 기판이 포함되어 있는지 결정할 수 있습니다. 4. 또 다른 것은 매우 무겁고, exportex.expectxxx () 메소드 뒤에 테스트 된 메소드를 작성하고, 그렇지 않으면 올바르게 테스트 할 수없는 예외 5. 마지막 것은 테스트 방법이 테스트중인 방법의 제외를 직접 던지는 한, 당신이 관련된 예외에 영향을 미치지 않는다는 것입니다. 앞에서 언급했듯이 시도를 사용하여… 캐치 메소드는 예외를 올바르게 테스트 할 수 있습니다. @test (예상 =…) 또는 @rule을 비교하고… 캐치 방법을 비교하면 어떤 이점이 있습니까? 분명히, Junit 4에서 권장하는 방법은 간결하고 명확합니다. 테스트가 실패했을 때 Junit이 당신에게 어떤 프롬프트 될지 살펴 보겠습니다.
테스트가 비정상적으로 실패했을 때 얻는 프롬프트 :
예외가 없을 때 :
java.lang.assertionerror : 예외가 발생하지 않습니다. at org.junit.assert.fail (assert.java:91)에서 cc.unmi.passwordtest.passwordlessthan6lettersthrowsexception (passwordtest.java:20)
예외 유형이 잘못되었거나 예외 메시지가 잘못된 경우 :
java.lang.assertionerror : org.junit.assert.assert.assert.asserttrue (assert.java:43)의 org.junit.assert.fail (assert.java:91) at org.junit.assert.asserttrue (assert.java:54) at cc.unmi.PasswordTest.Passwordlessthan6lettersthrowSexception (passwordtest.java:22)
포지셔닝 오류에 대한 위의 도움은 특히 크지 않습니다. @test (예상 = bizexception.class)시 테스트가 실패 할 때 프롬프트를보십시오.
java.lang.assertionerror : 예상 예외 : cc.test.bizexception at org.junit.internal.runners.statements.expectexception.evaluate (expectexception.java:32) at org.junit.rules.
예외를 테스트하기 위해 @Rules expectException을 사용하십시오. 실패시 팁 :
java.lang.assertionerror : 예상 : (메시지와 함께 "예. 필수"와 java.lang.nullpointerexception의 인스턴스를 포함하는 문자열과 함께 : at org.junit.assert.assertthat (assert.assert.assert.assert.assert.assert.assert.assert.assert.assert.sava:736). org.junit.rules.expectedexception $ exportexceptionstatement.evaluate (expectexception.java:114)
특히 @Rules expectException 메소드는 테스트가 실패한 이유를 분명히 알고 있습니다. 예상 예상, 예외 메시지에 포함 된 문자열, 실제로 얻은 예외 유형 및 예외의 메시지는 무엇입니까? 이를 통해 프로그램을 보자 마자 프로그램을 수정하는 방법을 알게 될 것입니다.