test 라이브러리 : j 유닛4.13
클래스를 테스트해야 한다 → 중요 : RUN AS JUNIT 으로 실행해서 테스트 한다.
tendency 에 의존성을 추가해야한다.
<!-- https://mvnrepository.com/artifact/junit/junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.1</version> <scope>test</scope> </dependency>
scope 가 test → 운영을 할때 동작을 하지 않고 테스트 할 때 동작을 한다.
web-inf → lib 에는 안생긴다.
Marven Dependencies 에서 harmcrest 도 같이 생긴다.
New - JUnit Test Case 만들기 → 이름은 테스트할 클래스 + Test
@Test public void test() { fail("Not yet implemented"); }
한개 생성된게 차이점이다.
Test : junit 으로 실행
메인이 존재하지 않는다. 이클립스, 메이븐등에서 자동으로 실행되서 main 이 없다.
(일반 class는 main_ 에서 실행이 된다. )
errors가 나오면 : 실행이 잘 되지 않았을때 ( assetEquals 랑 관련되지 않음)
failures 가 나오면 : assetEquals 를 통과하지 못했을때 → 실행은 된다.
모든 과정통과 : 녹색마크
실패 메시지 : java.lang.AssertionError: expected:<120> but was:<720>
해석 : 120을 기대치로 넣었지만 실제적인 값은 720 이다.
tomcat(구체화) := 일반화/추상화 : servlet container → service 를 호출하는 주체가 된다.
-servlet 을 테스트하기는 힘들다.
why?
→ interface 타입 httpaServletRequest
요청부분에서 인자가 두개 response, request
// getattribute, getsession, setattribute 등등 → 서버가 필요함 .
테스트하기가 힘들어짐 (서버에 의한 요청, 반응이 되는데 ) 이렇게
외부환경에 의존하고 있으면 테스트하기가 어려워진다.
bash 에서 :
통과를 못하면 → war는 안만들어짐
$ mvn package -Dmaven.test.skip=true
이렇게 쓰면 test 를 거치지 않음
클래스 구조 살펴보기
-TDD : Test Driven Development(테스트 기반 개발)
-BDD : Behavior Driver Development
-@Test : 텍스트 메소드에 붙이는 어노테이션
해당 어노테이션을 붙이지 않으면 테스트 메소드로 인식되지 않음(테스트 대상에서 제외)
제한사항 :
1. 메소드 시그니처를 정해진대로 구성해야함
접근제어자 : public
반환타입 : void
인자 : 없음
테스트 메소드 : 통과 조건
1. 테스트 메소드를 실행하는 과정에서 예외가 없이 끝까지 실행된 경우
2. assert 구문이 있을 경우 assert 구문이 전부 통과했을 때
/* @Test : 테스트 메소드에 붙이는 어노테이션
해딩 어노테이션을 붙이지 않으면 테스트 메소드로 인식되지 않음(테스트 대상에서 제외 )
제한사항 :
1. 메소드 시그니처를 정해진대로 구성해야함
접근제어자 : public
반환타입 : void
인자 : 없음
테스트 메소드 : 통과 조건
1. 테스트 메소드를 실행하는 과정에서 예외가 없이 끝까지 실행된 경우
2. assert 구문이 있을 경우 assert 구문이 전부 통과 했을 때
@before : 초기화 메소드에 붙이는 어노테이션
@test 어노테이션이 붙은 테스트 메소드를 호출하기 전에 먼저 실행됨
@before ==> @Test(test)
@before ==> @Test(test2)
@before ==> @Test(test3)
@after : @Test 메서드 실행 이후에 실행된 메소드에 붙이는 어노테이션
자원 해제를 주로 담당
@BeforeClass, @AfterClass
클래스 단위로 최초 1회씩 호출 되는 메소드
@BeforeClass
@before ==> @Test(test)
=> @After
@before ==> @Test(test2) ==> @After
@before ==> @Test(test3) ==> @After
@Afterclass
제한사항 : static 메소드로 선언을 해야한다. ==>
해당 메소드에서 사용하는 필드는 static 필드여야함 ==> 사용 빈도가 떨어지는 원인
정리
ackage kr.or.ddit+-
ervlet.basic;
import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class FactorialTest {
//TDD : Test Driven Development (테스트 기반 개발)
//BDD : Behavior Driven Development
/* @Test : 테스트 메소드에 붙이는 어노테이션
해딩 어노테이션을 붙이지 않으면 테스트 메소드로 인식되지 않음(테스트 대상에서 제외 )
제한사항 :
1. 메소드 시그니처를 정해진대로 구성해야함
접근제어자 : public
반환타입 : void
인자 : 없음
테스트 메소드 : 통과 조건
1. 테스트 메소드를 실행하는 과정에서 예외가 없이 끝까지 실행된 경우
2. assert 구문이 있을 경우 assert 구문이 전부 통과 했을 때
@before : 초기화 메소드에 붙이는 어노테이션
@test 어노테이션이 붙은 테스트 메소드를 호출하기 전에 먼저 실행됨
@before ==> @Test(test)
@before ==> @Test(test2)
@before ==> @Test(test3)
@after : @Test 메서드 실행 이후에 실행된 메소드에 붙이는 어노테이션
자원 해제를 주로 담당
@BeforeClass, @AfterClass
클래스 단위로 최초 1회씩 호출 되는 메소드
@BeforeClass
@before ==> @Test(test)
=> @After
@before ==> @Test(test2) ==> @After
@before ==> @Test(test3) ==> @After
@Afterclass
제한사항 : static 메소드로 선언을 해야한다. ==> 해당 메소드에서 사용하는 필드는 static 필드여야함 ==> 사용 빈도가 떨어지는 원인
*/
private static final Logger logger = LoggerFactory.getLogger(FactorialTest.class);
private Factorial factorial;
@Before
public void setup() {
logger.debug("setup");
factorial = new Factorial();
}
public void test() {
logger.debug("test()");
/***Given***/ //현재 테스트 환경에서 주어진 조건을 기술
// Factorial factorial = new Factorial();
/***When***/ //테스트를 검증 하고자 하는 행위( method call )
// private 이기 때문에 call 이 안된다. 나중에 다시 보고 public 으로 변경해줌
int result = factorial.calculate2(5);
//120부븐은 예측값이고 result 는 결과값이다.
//assertEquals(100, result);
/***Then***/ //코드를 실행한 결과와 예상한 값이 일치하는지 검증
}
@Test
public void test2() {
logger.debug("test2()");
/***Given***/ //현재 테스트 환경에서 주어진 조건을 기술
// Factorial factorial = new Factorial();
/***When***/ //테스트를 검증 하고자 하는 행위( method call )
// private 이기 때문에 call 이 안된다. 나중에 다시 보고 public 으로 변경해줌
int result = factorial.calculate2(8);
//120부븐은 예측값이고 result 는 결과값이다.
assertEquals(1, result);
/***Then***/ //코드를 실행한 결과와 예상한 값이 일치하는지 검증
}
@Test
public void test3() {
logger.debug("test3()");
/***Given***/ //현재 테스트 환경에서 주어진 조건을 기술
// Factorial factorial = new Factorial();
/***When***/ //테스트를 검증 하고자 하는 행위( method call )
// private 이기 때문에 call 이 안된다. 나중에 다시 보고 public 으로 변경해줌
int result = factorial.calculate2(3);
//120부븐은 예측값이고 result 는 결과값이다.
assertEquals(6, result);
/***Then***/ //코드를 실행한 결과와 예상한 값이 일치하는지 검증
}
}
실행했을 때
댓글
댓글 쓰기