컴퓨터 지식 네트워크 - 컴퓨터 백과사전 - junit 테스트를 위해 Eclipse를 사용하는 방법

junit 테스트를 위해 Eclipse를 사용하는 방법

1. 소개

JUnit은 Erich Gamma("Design Patterns"의 저자)와 Kent Beck(Extreme 프로그래밍 제안자)이 작성한 오픈 소스 회귀 테스트 프레임워크입니다. 단위 테스트를 수행하는 Java 코더. 현재 버전인 4.1은 www.junit.org 웹사이트에서 다운로드할 수 있습니다. 초기 JUnit 3에 비해 JUnit 4.1은 Java 5.0의 새로운 기능을 사용하므로 jdk 1.4와 호환되지 않는 완전히 새로운 프레임워크라고 할 수 있습니다.

여기에 사용된 IDE는 junit 4.1이 통합된 Eclipse 3.2.1 및 언어 팩이므로 클래스 라이브러리를 다운로드하고 구성할 필요가 없습니다. ^_^

II , 프로젝트 생성

다음으로 Eclipse를 열고 "파일"-gt; "프로젝트" 또는 "새로 만들기" 버튼을 클릭하여 "새로 만들기" 대화 상자를 엽니다.

"Java Project"를 선택하고 "Next"를 클릭하여 "New Java Project" 대화 상자로 들어갑니다.

이 대화 상자에서는 프로젝트 이름과 디렉터리를 설정해야 합니다. 내 프로젝트의 이름을 JUnitTest로 설정하고 디렉터리는 F:\YPJCCK\JUnit\Eclipse\JUnitTest입니다. Eclipse에는 JUnit 클래스 라이브러리가 함께 제공되므로 지금은 "Finish"를 클릭하기만 하면 됩니다.

3. 테스트용 JavaBean 작성

테스트용 JavaBean은 Book이라는 이름으로 매우 간단하며 id와 name이라는 두 가지 속성만 사용합니다. 두 가지 사용 사례. JavaBean 작성을 시작해 보겠습니다.

"파일" -> "새로 만들기" -> "클래스"를 클릭하여 "새 Java 클래스" 대화 상자를 열고 패키지를 net.test.unit.junit로, 이름을 Book으로 설정하고, "public static void main(String[] args)" 옵션이 선택 해제되어 있는지 확인하고 "마침"을 클릭하세요. 다음과 같이 코드를 수정합니다:

package net.test.unit.junit;

public class Book {

private String id = null;

비공개 문자열 이름 = null;

공개 문자열 getId() {

반환 ID

}

공개 무효 setId; (문자열 id) {

this.id = id;

}

public String getName() {

반환 이름;< /p >

}

publicvoid setName(문자열 이름) {

this.name = 이름

}

}

이제 테스트에 사용되는 JavaBean이 완성되었습니다.

4. 테스트 케이스 작성

테스트에는 BookTest라는 클래스 하나만 사용됩니다.

과거에는 이와 같은 클래스가 junit.framework.TestCase를 상속해야 했지만 JUnit 4.1에서는 Java 5.0의 새로운 주석 기능을 최대한 활용하므로 더 이상 이를 수행할 필요가 없습니다. 물론 JUnit 4.1에서는 이전 방법을 계속 지원하지만 여기서는 소개할 의도가 없습니다.

BookTest 클래스에는 클래스의 caseId 및 caseName 메서드에 해당하는 두 가지 사용 사례가 포함되어 있습니다. 즉, 각 메서드는 사용 사례를 구현합니다. JUnit 3.8.1과 달리 JUnit 4.1에서는 메소드 이름이 test로 시작하는 것이 더 이상 필수가 아니지만 이를 표시하기 위해 Java 명명 규칙을 준수하는 한 임의의 명명을 허용합니다. 여기서는 특별히 사용하지만 테스트 케이스에는 @Test로 주석을 달아야 합니다. 또한 BookTest에는 각각 @Before 및 @After라는 주석이 붙은 두 가지 메서드가 있습니다. 전자는 각 테스트 메서드가 시작되기 전에 실행되고 후자는 각 테스트 메서드가 완료된 후에 실행되는 경우가 많습니다. . , 주로 리소스를 정리하는 데 사용됩니다. 이 두 메소드의 이름 지정에는 제한이 없으며 정의 수에도 제한이 없지만 @Before 및 @After로 주석을 달아야 합니다. 또한, JUnit 4.1에서는 @BeforeClass, @AfterClass 어노테이션도 제공하는데, 이는 @Before, @After와 유사한 기능을 갖고 있으나 전자는 모든 Use Case가 실행되기 전 초기화하고 실행 후 정리하는 데 사용되고, 후자는 초기화하는 데 사용됩니다. 각 사용 사례가 실행되기 전에 나중에 정리하세요. BookTest 작성을 시작해 보겠습니다.

Eclipse에서는 BookTest 클래스를 생성하는 방법이 두 가지 있습니다. 방법 1. 이전에 Book 클래스를 생성한 것과 마찬가지로 "File"-gt를 클릭하여 생성합니다. 방법 2, 먼저 "Package Explorer"에서 Book 클래스를 선택한 다음 "File"-gt; "New"-gt; "JUnit Test Case"를 클릭하여 "New JUint Test Case" 창을 엽니다.

이 시점에서 Eclipse에 의해 자동으로 많은 정보가 추가되었음을 알 수 있습니다. Eclipse를 사용하여 테스트 메소드를 자동으로 생성하려면 "다음"을 클릭하세요. 본 글에서는 테스트 방법을 직접 작성하게 되므로 직접 "Finish"를 클릭하시기 바랍니다.

BookTest 클래스를 생성한 후 다음과 같이 코드를 수정합니다:

package net.test.unit.junit;

import static org.junit.Assert. *;

org.junit.After 가져오기;

org.junit.Before 가져오기;

org.junit.Test 가져오기;

public class BookTest {

도서 도서 = null;

@Before

public void setUp()에서 예외가 발생합니다. {

시스템. out.println ("테스트 시작!");

book = new Book();

System.out.println("book 개체가 초기화되었습니다!")

}

@After

public void teaDown() throws Exception {

System.out.println("book 개체가 정리됩니다! ");

book = null;

System.out.println("테스트가 끝났습니다!");

}

@Test

public void caseId() {

book.setId("001"); //id 속성의 값을 001로 설정

/ /Assert를 사용하여 id 속성 보기 값이 001인지 여부

AssertEquals("001", book.getId());

System.out.println("id 속성은 테스트됨!");

}

@Test

public void caseName() {

book.setName("ASP") ; //name 속성의 값을 ASP로 설정

//Assert를 사용하여 name 속성의 값이 JSP인지 확인하는 테스트이므로 오류가 발생할 수 있습니다.

AssertEquals("JSP", book.getName());

p>

System.out.println("name 속성이 테스트되었습니다! ");

}

}

여기서 setUp 및 TearDown 메소드에 대해 특별히 언급할 내용은 없습니다. 이들은 단지 책의 초기화 및 정리 작업을 수행할 뿐입니다. object, 그러나 caseId 및 caseName 설명이 필요합니다.

전자는 책의 id 속성을 테스트하는 것입니다. 먼저 "001"에 값을 할당한 다음, 내가 예상한 값도 "001"이므로 id 속성에 저장된 값이 예상한 값인지 확인합니다. ", 이 사용 사례는 성공한 후에 실행됩니다. 후자는 책의 이름 속성을 테스트하고 먼저 "ASP"에 값을 할당한 다음 AssertEquals 메서드를 사용하여 값이 예상되는지 확인하는 것입니다. 의도적으로 예상값을 "JSP"로 설정했기 때문에 이 유스 케이스가 실행된 후에는 오류가 발생합니다.

assertEquals 메소드는 Assert 클래스의 정적 메소드입니다. 프로그램 시작 부분에는 Java 5.0에서 제공하는 정적 가져오기를 사용하여 Assert 클래스를 정적으로 가져오는 "import static org.junit.Assert.*;"라는 코드 줄이 있으므로 모든 정적 가져오기를 직접 사용할 수 있습니다. 프로그램의 Assert 클래스 메서드입니다. 다음은 정적 클래스 org.junit.Assert에 대한 간략한 소개입니다.

이 클래스에는 주로 다음과 같이 8개 카테고리에 22개의 메소드가 포함되어 있습니다.

1. AssertEquals(), 8개의 오버로드, 객체에 저장된 값이 예상 값인지 확인하는 데 사용되며 문자열 비교에 사용되는 equals() 메서드와 유사합니다.

2. 각각 2개의 오버로드가 있는 AssertFalse() 및 AssertTrue()는 변수가 false인지 true인지 확인하는 데 사용됩니다. 실패합니다.assertTrue()그리고 그 반대;

3. 각각 2개의 오버로드가 있는 AssertSame() 및 AssertNotSame()은 "==" 및 "!="를 통해 두 개체를 비교하는 것과 유사하게 두 개체의 참조가 같은지 또는 다른지 비교하는 데 사용됩니다.

4. 각각 2개의 오버로드가 있는 AssertNull() 및 AssertNotNull()은 객체가 비어 있는지 여부를 확인하는 데 사용됩니다.

5. 실패(), 2개의 오버로드, 즉 실패를 의미하며 오류를 발생시키는 데 사용됩니다. 저는 개인적으로 두 가지 용도가 있다고 생각합니다. 첫째, 테스트 중심 개발에서는 테스트되는 클래스가 테스트되기 전에 테스트 사례가 작성되고 작성 시 올바른지 여부가 확실하지 않기 때문에 실패 메소드를 사용할 수 있습니다. 오류를 발생시킵니다. 둘째, 예상치 못한 오류를 발생시킵니다. 예를 들어 테스트 내용은 데이터베이스에서 읽은 데이터가 올바른지 여부이지만 오류의 원인은 데이터베이스 연결이 실패했기 때문입니다.

5. BookTest 실행

BookTest를 작성한 후 실행할 수 있습니다. 실행 버튼 옆의 역삼각형을 클릭하고 "실행"->"1 JUnit 테스트"를 선택하세요. 실행 효과는 다음과 같습니다.

왼쪽에 "JUnit" 열이 표시됩니다. 사진에 오류가 있습니다. 하지만 이 오류는 예상된 것입니다. 이를 보고 싶지 않은 경우 testName() 메서드의 "JSP"를 "ASP"로 변경하면 실행 효과는 다음과 같습니다.

이때. "JUnit" 열의 진행률 표시줄이 더 이상 빨간색이 아닌 녹색으로 표시되는 것을 볼 수 있습니다. 이는 오류가 없음을 의미합니다.

6. 테스트 스위트

여러 테스트 클래스를 동시에 테스트해야 하는 경우 테스트 스위트를 사용하여 작업을 완료해야 합니다. 하지만 Eclipse 3.2.1에서 제공하는 테스트 스위트 생성 기능은 JUnit 4.1을 잘 지원하지 않기 때문에 수동으로만 생성할 수 있다.

"파일"-gt; "새로 만들기"-gt; "클래스"를 클릭하여 아래와 같이 클래스 이름이 AllTests인 클래스를 만듭니다.

"마침"을 클릭하고 수정합니다. 코드는 다음과 같습니다:

package net.test.unit.junit;

import org.junit.runner.RunWith;

import org.junit.runners .Suite;

@RunWith(Suite.class)

@Suite.SuiteClasses(BookTest.class)

공용 클래스 AllTests {}

비어 있습니다. AllTests 클래스에는 테스트 프로그램 항목으로 @RunWith 및 @Suite.SuiteClasses라는 주석이 추가됩니다. @Suite.SuiteClasses 주석의 매개변수로 테스트할 BookTest 클래스를 사용한 다음, @RunWith 실행기에 대한 매개변수로 테스트 스위트 Suite를 설정합니다. 다음으로 파일을 선택하고 "다음 계정으로 실행"->"1 JUnit 테스트"를 클릭합니다.

여기서 @Suite.SuiteClasses 주석은 배열을 지원합니다. 예:

@Suite.SuiteClasses ({BookTest.class, BookTest2.class })

이를 통해 여러 테스트 클래스를 한 번에 실행할 수 있습니다.

7. 명령줄에서

앞서 소개한 실행 방법은 모두 Eclipse를 기반으로 합니다. 실제로 JUnit 자체도 명령줄에서 다음 명령을 실행하는 방법을 제공합니다.

java -cp junit-4.1.jar이 위치한 폴더 org.junit.runner.JUnitCore

net.test.unit.junit.AllTests

여러 테스트 클래스를 실행하려면 다음과 같이 하세요.

java -cp junit-4.1.jar이 있는 폴더 org.junit.runner.JUnitCore

net. test.unit.junit.AllTests net.test.unit.BookTest

8. JUnit의 고급 사용

@Ignore 주석은 테스트를 무시하고 수행하는 테스트 사례를 무시하는 데 사용됩니다. 일시적으로 실행하고 싶지 않습니다. BookTest를 예로 들어 파일 헤더에 "import org.junit.Ignore;" 참조를 추가한 다음 caseName 메소드를 수정합니다:

@Ignore

@Test

public void caseName()

"실행"-gt; "1 JUnit 테스트"를 클릭하면 실행 효과는 다음과 같습니다.

caseName() 메서드 현재로서는 무시되었습니다.

@Test 주석의 예상 매개변수인 예외 테스트는 지정된 예외가 발생하면 성공하고, 그렇지 않으면 실패인지 테스트하는 데 사용됩니다.

BookTest에 새 테스트 사례를 추가하세요:

@Test(expected = ArithmeticException.class)

public void caseException() {

int n = 2 / 0;

}

이 테스트 사례는 0을 제수로 사용하며 실행 효과는 다음과 같습니다.

성공! 지정된 ArithmeticException이 발생했기 때문입니다.

시간 제한 테스트인 @Test 주석의 timeout 매개변수는 테스트 케이스에 소요되는 시간을 밀리초 단위로 제한하는 데 사용됩니다. 그렇지 않으면 테스트 사례의 실행 결과가 허용됩니다. BookTest에 새 테스트 사례를 추가하세요:

@Test(timeout=1000)

public void caseWhile() {

for (;;) {

}

}

이것은 무한 루프이며 1초 후에 강제 중지됩니다. 작업 효과는 다음과 같습니다.

시간 초과로 인해 작업이 실패했습니다.

매개변수화된 테스트인 @Parameters 주석은 동일한 테스트 사례에 대한 데이터 세트를 테스트하는 데 사용됩니다.

새로운 "JUnit 테스트 케이스" BookTest2를 생성하고 다음과 같이 코드를 수정하십시오:

package net.test.unit.junit;

import static org.junit.Assert.assertEquals;

java.util.Arrays 가져오기;

java.util.Collection 가져오기;

org.junit.After 가져오기;

가져오기 org.junit .Before;

org.junit.Test 가져오기;

org.junit.runner.RunWith 가져오기;

org.junit.runners 가져오기. Parameterized;

import org.junit.runners.Parameterized.Parameters;

@RunWith(Parameterized.class)

public class BookTest2 {

개인 문자열 예상 ID;

개인 문자열 targetId;

개인 문자열 예상 이름;

책 book = null ;

p>

@Parameters

public static Collection Result() {

return Arrays.asList(new Object[][] {

{ "002", "001", "JSP", "ASP" },

{ "001", "001", "ASP", "ASP" }

});

}

public BookTest2(String ExpectId, String targetId, String ExpectName, String targetName) {

this.expectedId = ExpectId ;

this.targetId;

this.expectedName = ExpectName;

this.targetName =

}

@Before

public void setUp()에서 예외 발생 {

System.out.println("테스트 시작! ");

book = new Book();

System.out.println("book 개체가 초기화되었습니다!")

}

@After

public void teeDown() throws Exception {

System.out.println("book 개체가 정리됩니다!");

book = null;

System.out.println("테스트가 끝났습니다!")

}

@Test

public void caseId( ) {

book.setId(targetId); //id 속성 값 설정

//Assert를 사용하여 id 속성 값 보기

AssertEquals(expectedId, book.getId());

System.out.println("id 속성이 테스트되었습니다!");

}

@Test

public void caseNames() {

book.setName(targetName) //name 속성 값 설정

//Assert 사용 name 속성의 값을 보려면

AssertEquals(expectedName, book.getName());

System.out.println("name 속성이 테스트되었습니다!");

}

}

이 예는 실제로 BookTest의 확장 버전이지만 원래 기반에는 몇 가지 변경 사항이 있습니다.

첫째, 파일 헤더에 한 줄의 코드가 추가됩니다. @RunWith(Parameterized.class)는 실행할 BookTest2 클래스를 호출하는 데 사용됩니다.

두 번째로 @Parameters 주석이 달린 Result 정적 메서드가 정의됩니다. 이 메서드는 테스트 데이터를 저장하는 데 사용됩니다. 이 예에서는 각 세트가 4개인 2개의 데이터 세트를 저장합니다.

다시 한번 매개변수가 있는 생성자가 정의되고 매개변수의 수는 각 데이터의 수와 같습니다. 테스트 데이터 그룹;

마지막으로, ExpectId를 포함한 4개의 멤버 변수가 정의되어 테스트 데이터를 테스트 케이스에 전달하는 데 사용됩니다.

아래에서 BookTest2가 실행되고 실행 효과는 다음과 같습니다.

테스트 케이스가 두 번 실행되었습니다. 처음에는 예상 값과 설정 값이 같지 않아 실패했습니다. , 그러나 두 번째로 성공적으로 실행되었습니다.

junit.framework.JUnit4TestAdapter 클래스.

Java 5.0의 새로운 기능에 의존하여 테스트 케이스를 개발하기 위해 junit.framework.TestCase를 상속할 필요가 없는 JUnit 4.1이 출시된 지 꽤 되었습니다. 그러나 NetBeans 5.5와 같은 자체 JUnit 테스트 환경을 갖춘 일부 IDE가 있습니다. 이전 버전의 Eclipse에서도 여전히 JUnit 3만 지원하고 JUnit 4.1 환경을 기반으로 개발된 테스트 케이스를 올바르게 실행할 수 없으므로 이 문제를 해결하려면 junit.framework.JUnit4TestAdapter 클래스를 사용해야 합니다. 새 클래스 TestSuite를 생성하고 다음과 같이 코드를 수정합니다:

package net.test.unit.junit;

public class TestSuite {

public staticvoid main( String[] args ) {

junit.textui.TestRunner.run(TestSuite.suite())

}

public static junit.framework.Test suite() {

return new junit.framework.JUnit4TestAdapter(AllTests.class)

}

}

가장 중요한 것 하나는 suite 메소드입니다. 이 메소드를 사용하면 JUnit 4 환경을 기반으로 작성된 AllTests 클래스가 junit.framework.JUnit4TestAdapter 클래스를 통해 JUnit 3 명령줄 환경에서 실행될 수 있습니다.

上篇: Alibaba Cloud Server ECS 운영 체제를 선택하는 방법은 무엇입니까? 下篇: 휴대폰에서 1인치 전자 사진을 만드는 방법은 무엇입니까?
관련 내용