service 단에 데이터가 잘 전달되는지 확인 하기 위해 브레이크포인트 넣어서 확인하기.
단위테스트의 시작
*테스트를 하는 습관은 정말 중요하니까 항상 몸에 익숙하게 만들자!
내가 테스트하고자 하는 것을 시나리오를 먼저 만들어야함.
1. 테스트 디렉토리 만들기 [src - test - java - edu -axboot - domain - {company - [CompanyServiceTest.java]}
2. class 설계
*Junit assert 기능 알아보기
3. Test 구성
Test 실행: 현 소스코드에서 마우스 오른쪽 클릭 run으로 실행
디버그 실행: 현 소스코드에서 마우스 오른쪽 클릭 디버그 run으로 실행
package edu.axboot.domain.company;
import com.chequer.axboot.core.parameter.RequestParams;
import edu.axboot.AXBootApplication;
import lombok.extern.java.Log;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.List;
import static org.junit.Assert.assertTrue;
//테스트하려고 하는 메소드위에 단위테스트를 할 수 있는 어노테이션을 준다.
@Log
@RunWith(SpringRunner.class)
@SpringBootTest(classes = AXBootApplication.class)
public class CompanyServiceTest {
@Autowired
private CompanyService companyService;
@Test
//companyservie.java에서 getByQueryDsl의 함수를 테스트할 경우.
//Test와 해당 메서드명을 명시해줌
public void testGetQueryDls() {
// 테스트단계에서도 "디버깅" 가능
// ***given : 사전준비, 테스트하기위한 변수,정의
RequestParams<Company> requestParams = new RequestParams<Company>(); //해당 메서드 파라미터값
requestParams.put("company", "토스"); //파라미터 값 넣어주기
requestParams.put("ceo", "");
requestParams.put("bizno", "");
// ------------값을 던짐------
// ***when : 실제 Action
List<Company> result = this.companyService.getByQueryDsl(requestParams);
//------파라미터값 넘겨주기
// ***then : 결과에 참값의 성공여부. ( true/false )
// asserTrue : 결과값 여부의 참거짓을 반환하는 기능.
// assertTrue(result.size() > 0);
// 참의 조건을 정확하게 1건인지 명시
assertTrue(result.size() == 1);
}
}
1)
2)
3)
리팩토링
Test로 테이블 데이터 CRUD
Insert
@Test
public void testSaveQueryDls_create() {
/* given
1.Company객체 값 형태의 Array배열의 객체를 선언,*/
List<Company> requests = new ArrayList<Company>(); // 그릇
// 2.객체를 생성해서 값을 add해야한다. 데이터를 담을 재료(내용)들..
Company company = new Company();
company.setCompanyNm("단테회사");
company.setCeo("단테대표");
company.setBizno("1234");
company.set__created__(true); //생성하기 위해 true값을 넣어줌
//company객체가 SimpleJpaModel를 상속받아서
//SimpleJpaModel의 AxBootCrudModel 에 CRUD기능이 있음.
requests.add(company); // 내용을 담아 파라미터 값을 보냄
/*when
* 결과값을 받는 result*/
int result = this.companyService.saveByQueryDsl(requests);
// then
// 결과값 1이나오면 테스트 성공
assertTrue(result == 1);
}
정보를 복수로 넣어줄 때 인스턴스는 별도로 생성해줘야 데이터 정보 겹침 현상이 안됨
Update
Delete
-목업/단위테스트 통합확인 하기 위해 브레이크포인트 넣어서 확인하기.
단위테스트의 시작
*테스트를 하는 습관은 정말 중요하니까 항상 몸에 익숙하게 만들자!
내가 테스트하고자 하는 것을 시나리오를 먼저 만들어야함.
1. 테스트 디렉토리 만들기 [src - test - java - edu -axboot - domain - {company - [CompanyServiceTest.java]}

2. class 설계

*Junit assert 기능 알아보기
3. Test 구성
Test 실행: 현 소스코드에서 마우스 오른쪽 클릭 run으로 실행
디버그 실행: 현 소스코드에서 마우스 오른쪽 클릭 디버그 run으로 실행
package edu.axboot.domain.company;
import com.chequer.axboot.core.parameter.RequestParams;
import edu.axboot.AXBootApplication;
import lombok.extern.java.Log;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.List;
import static org.junit.Assert.assertTrue;
//테스트하려고 하는 메소드위에 단위테스트를 할 수 있는 어노테이션을 준다.
@Log
@RunWith(SpringRunner.class)
@SpringBootTest(classes = AXBootApplication.class)
public class CompanyServiceTest {
@Autowired
private CompanyService companyService;
@Test
//companyservie.java에서 getByQueryDsl의 함수를 테스트할 경우.
//Test와 해당 메서드명을 명시해줌
public void testGetQueryDls() {
// 테스트단계에서도 "디버깅" 가능
// ***given : 사전준비, 테스트하기위한 변수,정의
RequestParams<Company> requestParams = new RequestParams<Company>(); //해당 메서드 파라미터값
requestParams.put("company", "토스"); //파라미터 값 넣어주기
requestParams.put("ceo", "");
requestParams.put("bizno", "");
// ------------값을 던짐------
// ***when : 실제 Action
List<Company> result = this.companyService.getByQueryDsl(requestParams);
//------파라미터값 넘겨주기
// ***then : 결과에 참값의 성공여부. ( true/false )
// asserTrue : 결과값 여부의 참거짓을 반환하는 기능.
// assertTrue(result.size() > 0);
// 참의 조건을 정확하게 1건인지 명시
assertTrue(result.size() == 1);
}
}
1)

CompanyService.java
2)

CompanyServiceTest.java
3)

CompanyService.java
리팩토링

Test로 테이블 데이터 CRUD
Insert
@Test
public void testSaveQueryDls_create() {
/* given
1.Company객체 값 형태의 Array배열의 객체를 선언,*/
List<Company> requests = new ArrayList<Company>(); // 그릇
// 2.객체를 생성해서 값을 add해야한다. 데이터를 담을 재료(내용)들..
Company company = new Company();
company.setCompanyNm("단테회사");
company.setCeo("단테대표");
company.setBizno("1234");
company.set__created__(true); //생성하기 위해 true값을 넣어줌
//company객체가 SimpleJpaModel를 상속받아서
//SimpleJpaModel의 AxBootCrudModel 에 CRUD기능이 있음.
requests.add(company); // 내용을 담아 파라미터 값을 보냄
/*when
* 결과값을 받는 result*/
int result = this.companyService.saveByQueryDsl(requests);
// then
// 결과값 1이나오면 테스트 성공
assertTrue(result == 1);
}

정보를 복수로 넣어줄 때 인스턴스는 별도로 생성해줘야 데이터 정보 겹침 현상이 안됨

두 테이블 추가시
Update

Delete

-목업/단위테스트 통합: 허상의 데이터를 놓고 직접 db에 반영하지 않고 테스트를 하는 것. 생성-수정-삭제까지 완료하고 테스트를 마침
-테스트는 수행하되, 흔적을 남기지 않기 위해서 일괄적으로 CRUD를 실행하여 테스트 성공여부로 에러 판단을함.
package edu.axboot.domain.company;
import com.chequer.axboot.core.parameter.RequestParams;
import edu.axboot.AXBootApplication;
import lombok.extern.java.Log;
import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.MethodSorters;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.ArrayList;
import java.util.List;
import static org.junit.Assert.assertTrue;
//테스트하려고 하는 메소드위에 단위테스트를 할 수 있는 어노테이션을 준다.
@Log
@RunWith(SpringRunner.class)
@SpringBootTest(classes = AXBootApplication.class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING) //이름순으로 정렬
public class CompanyServiceTest {
@Autowired
private CompanyService companyService;
public static long testId = 0; // 전역변수로 정의해서 결과값을 공유
//그냥 long타입이면 함수가 바뀔때마다 값이 0으로 초기화 되므로 static으로 정의함.
@Test
//companyservie.java에서 getByQueryDsl의 함수를 테스트할 경우.
//Test와 해당 메서드명을 명시해줌
public void testGetQueryDls() {
// 테스트단계에서도 "디버깅" 가능
// ***given : 사전준비, 테스트하기위한 변수,정의
RequestParams<Company> requestParams = new RequestParams<Company>(); //해당 메서드 파라미터값
requestParams.put("company", "토스"); //파라미터 값 넣어주기
requestParams.put("ceo", "");
requestParams.put("bizno", "");
// ------------값을 던짐------
// ***when : 실제 Action
List<Company> result = this.companyService.getByQueryDsl(requestParams);
//------파라미터값 넘겨주기
// ***then : 결과에 참값의 성공여부. ( true/false )
// asserTrue : 결과값 여부의 참거짓을 반환하는 기능.
// assertTrue(result.size() > 0);
// 참의 조건을 정확하게 1건인지 명시
assertTrue(result.size() == 1);
}
@Test
public void testGetQueryDlsByString() { //레이블로 조회
// ***given : 사전준비, 테스트하기위한 변수,정의
String companyNm = "토스";
String ceo = "";
String bizno = "";
// ***when : 실제 Action
List<Company> result = this.companyService.getByQueryDsl(companyNm, ceo, bizno);
// 새로운 메서드명, 같은 메서드명으로도 가능
// ***then : 결과에 참값의 성공여부. ( true/false )
assertTrue(result.size() == 1);
}
// 테이블 생성
@Test
public void test1_SaveQueryDls_create() {
/* given
1.Company객체 값 형태의 Array배열의 객체를 선언,*/
List<Company> requests = new ArrayList<Company>(); // 그릇
// 2.객체를 생성해서 값을 add해야한다. 데이터를 담을 재료(내용)들..
Company company = new Company();
company.setCompanyNm("단테회사");
company.setCeo("단테대표");
company.setBizno("1234");
company.set__created__(true); //생성하기 위해 true값을 넣어줌
//company객체가 SimpleJpaModel를 상속받아서
//SimpleJpaModel의 AxBootCrudModel 에 CRUD기능이 있음.
requests.add(company); // 내용을 담아 파라미터 값을 보냄
/*
when
결과값을 받는 result
*/
testId = this.companyService.saveByQueryDsl(requests);
// then
// 결과값 1이나오면 테스트 성공
assertTrue(testId > 0);
}
// modified
@Test
public void test2_SaveQueryDls_update() {
//given
List<Company> requests = new ArrayList<Company>(); // 그릇
Company company = new Company();
company.setId(testId); //강제 캐스팅 & 뒤에 L붙이는 2가지 방법이 있음
company.setCompanyNm("단테회사2");
company.setCeo("단테대표");
company.setBizno("1234");
company.set__modified__(true);
requests.add(company);
/*when
* 결과값을 받는 result*/
long result = this.companyService.saveByQueryDsl(requests);
// then
// 결과값 1이나오면 테스트 성공
assertTrue(result == 1);
}
//Delete
@Test
public void test3_SaveQueryDls_delete() {
//given
List<Company> requests = new ArrayList<Company>();
Company company = new Company();
company.setId(testId);
company.set__deleted__(true);
requests.add(company);
/*when
* 결과값을 받는 result*/
long result = this.companyService.saveByQueryDsl(requests);
// then
// 결과값 1이나오면 테스트 성공
assertTrue(result == 1);
}
}
@FixMethodOrder(MethodSorters.NAME_ASCENDING) //이름순으로 정렬기능을 추가
SelectOne의 함수를 만들어 테스트하고자 하는 정보와 실제 db에 저장된 정보가 같은지 확인
@Test
public void test4_GetQueryDls_seletOne() { //레이블로 한건 조회
// ***given : 사전준비, 테스트하기위한 변수,정의
String companyNm = "단테회사2";
String ceo = "";
String bizno = "";
// ***when : 실제 Action
Company result = this.companyService.getOneByQueryDsl(testId);
// ***then : 결과에 참값의 성공여부. ( true/false )
assertTrue(result.getCompanyNm().equals(companyNm));
}
public Company getOneByQueryDsl(long id) {
BooleanBuilder builder = new BooleanBuilder(); // BooleanBuilder : where뒤에 조건을 생성해줌
builder.and(qCompany.id.eq(id));
Company company = select()
.from(qCompany)
.where(builder)
.fetchOne();
return company;
}
디렉토리 파악
src - 실제 관리하는 파일
컴파일 후 저장되는 정보(클래스생성등) -target
webapp - 화면단
java - 자바코드
환경파일 resource 폴더 - 환경설정 파일들이 있음
axboot-common-properties : 공통적으로 설정되야되는 요소들
axboot-local-production 파일:개발환경에서 이뤄질때
axboot-production-properties: common-properties 와 비슷한 구성
운영계에 돌리는 환경 /운영계환경이 다를때 이곳에 파일을 만들어서 활용
속성의 axboot.dataSource.url이 서로 다름.
로컬/프로덕션 환경 구분: src-main-java-프로젝트폴더(edu) 폴더안에 AxbootApplication.java에
[@PropertySource(value = {"classpath:axboot-common.properties", "classpath:axboot-${spring.profiles.active:local}.properties"})]에서 확인가능.
[local, production] 2가지 타입으로 JDBCURL (/setup :URL)을 DB환경을 변경할 수 있음
DB환경이 바뀌면 loca.properties에 설정을 적용하면됨 (mysql, oracle계정 등..)
다국어 지원- 리소스에 다른 언어의 properties를 추가하면 됨.
resource-template : 프로그램 화면단 템플릿 jsp소스 불러와서 구성할 수 있음.
AXBootSecurityConfig.java
role권한 설정을 할 수 있음.
spring seculity에서 자동적으로 설정을 지원해줘서 알맞게 설정하면된다.
AxBootWebConfigureAdapter 화면단
데이터베이스에 대한 트랜잭션,소스 관리
'Programming👩🏻💻 > AxBoot' 카테고리의 다른 글
Banner / Logging / Excel download (0) | 2021.04.30 |
---|---|
jsfiddle (0) | 2021.04.23 |
Mybatis연동 (0) | 2021.04.19 |
QueryDSL (0) | 2021.04.19 |
Mac 맥) Maven 설치 및 환경 변수 설정 (0) | 2021.04.19 |