- 프로젝트 오른쪽 클릭 - Properties - Java Build Path - Libraries - Add Library - JUnit 선택, 버전 선택 - finish
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
Calc.java
public class Calc {
private int a;
private int b;
public Calc(int a, int b) {
this.a = a;
this.a = b;
}
public int plus() {
return a+b;
}
public int minus() {
return a-b;
}
public int multiply() {
return a*b;
}
public int divide() {
return a/b;
}
}
- Which method stubs would you like to create?
@BeforeAll : 해당 테스트 클래스를 초기화할 때 한 번만 실행된다. (static 필수) @AfterAll : 해당 테스트 클래스 내 모든 테스트 메소드가 실행된 후 한 번만 실행된다. (static 필수) @BeforeEach : 매번 각 테스트 메소드 전에 실행된다. @AfterEach : 매번 각 테스트 메소드 이후에 실행된다. @Test : 테스트가 일어나는 메소드이다. @Disabled : Annotation이 붙은 테스트 메소드는 무시된다.
CalcTest.java
class CalcTest {
private Calc calc;
@BeforeAll
static void setUpBeforeClass() throws Exception {
System.out.println("@BeforeAll 실행");
}
@AfterAll
static void tearDownAfterClass() throws Exception {
System.out.println("@AfterAll 실행");
}
@BeforeEach
void setUp() throws Exception {
System.out.println("@BeforeEach 실행");
calc=new Calc(6,2);
}
@AfterEach
void tearDown() throws Exception {
System.out.println("@AfterEach 실행");
}
@Test
void testPlus() {
assertEquals(8,calc.plus());
}
@Test
void testMinus() {
assertEquals(4,calc.minus());
}
@Test
void testMultiply() {
assertEquals(12,calc.multiply());
}
@Test
void testDivide() {
assertEquals(3,calc.divide());
}
}
- 매개변수 하나를 추가해주면 오차범위를 정할 수 있습니다.
- assertTrue(message, condition) : condition이 true면 message를 출력합니다.
- assertEquals(x, y)는 두 객체의 두 값을 비교합니다.
예시 :
@Test public void testAdd() { int result = 2+10; assertThat(result, is(12)); }
- JUnit의 Matcher를 정리해주신 블로그입니다.
assertThat(테스트 타겟).메소드1.메소드2.,,,,
import static org.assertj.core.api.Assertions.*;
assetThat("타겟 문자열")
.contins("a") //a 문자열을 포함하고
.doseNotContain("b") //b 문자열을 포함하지 않고
.isNotEmpty() //비어있지 않고
.startsWith("c") //c 문자열로 시작하고
.endWith("d") //d 문자열로 끝나고
.isEqualTo("e") //e 문자열과 같고
assetThat("타겟 숫자")
.isGreaterThan(0) // 0보다 크고
.isLessThan(1) // 1보다 작고
.isPositive() // 양수이고
.isNegative() // 음수이고
.isEqualTo(2) // 2와 같고
.isEqualTo(3, offset(0.1d)) //오프셋 0.1기준으로 값이 같고
@RequestMapping(value = "/getStudent.do", method = RequestMethod.GET)
을 이용하여 Get, Post 방식을 나눠서 받기도 했다.
- 위 방식은 value값을 URI가 정보의 자원을 효율적으로 보여주기에 어렵고, RESTful 하다고 할 수 없다.
그래서 클래스 단에 Annotation을 붙여 공통된 URI를 지정할 때 사용한다.
// import 생략
@RequestMapping("/school")
@RestController
public class RESTController {
@Autowired
StudentService studentService;
// GET : SELECT
@GetMapping("/student")
public String getStudent(@RequestBody Student student) {
Student student = studentService.getStudent()
return "조회한 학생 정보 : "+ student.toString();
}
// POST : INSERT
@PostMapping("/student")
public String postStudent(@RequestBody Student student) { studentService.insertStudent();
return "등록된 학생 정보 : " +student.toString();
}
// PUT : UPDATE
@PutMapping("/student")
public String putStudent(@RequestBody Student student) {
studentService.updateStudent();
return "학생 정보 수정 처리";
}
// DELETE : DELETE
@DeleteMapping("/student")
public String deleteStudent(@RequestParam int seq) {
studentService.deleteStudent();
return seq + "번 학생 정보 삭제";
}
}
@ResponseBody : 메소드 위에 붙으며, 리턴하는 Java 객체를 JSON 로 변환해서 HTTP 응답 바디에 넣어 화면에 출력할 수 있다.
- 클래스 위에 붙으며, 클래스 내 모든 메소드의 리턴값을 바디에 담아 응답한다.
- 매 메소드마다 @ResponseBody를 붙이기 번거로울 때 이용할 수 있다.
- 프론트 단에서 id 속성으로 정한 값은 Server 단으로 넘어오지 않아서 name 속성만 받을 수 있다.
- id : JavaScript에서 사용하기 위해 지정한다.
- name : 서버로 파라미터 전송을 하기 위해 지정한다.
@GetMapping("/school/class/{number}")
public Class getClass(@PathVariable int number){
//생략
}
Reference: