djunit
3226 단어 JUnit
앞으로 개발 에 추진 이 필요 합 니 다.
djunit 를 왜 써 요?
1. 주 니 트 를 뛸 때마다 데이터 베 이 스 를 연결 해 야 하 는데 우 리 는 실제 데이터 에 관심 이 없고 시 뮬 레이 션 만 하면 된다.
2. 매번 server 를 시작 해 야 합 니 다. 느 리 고 저 희 는 server 에 관심 이 없습니다.
3. 기타 관련 시스템 (소프트웨어 와 하드웨어)
어 떡 하지?
1. 테스트 코드 를 복사 하여 관련 코드 를 제거 하고 아 날로 그 데이터 로 대체 합 니 다.
2. 아 날로 그 외부 환경 만 들 기: 예 를 들 어 orcale 을 사용 하지 않 고 hsql 메모리 데이터 베 이 스 를 사용 합 니 다.
3. 유행 하 는 jmock 으로.
위의 세 가지 방법 은 모두 문제 가 있다.
1. 코드 를 바 꾸 려 면 테스트 코드 를 수정 해 야 합 니 다. 프레임 코드 를 호출 해 야 하 는 업무 에 대해 복사 할 것 이 너무 많 습 니 다.
2. 아 날로 그 환경 에 차이 가 있 습 니 다. 예 를 들 어 hsql 을 사용 합 니 다. 만약 에 우리 가 Oacle 과 관련 된 함수, 문법, 저장 과정 을 사용 하면 테스트 에 실패 할 수 있 습 니 다 (실제 코드 는 맞습니다).
3. jmock 은 주 입 된 클래스 (예 를 들 어 spring, CDI 등) 만 교체 할 수 있 고 실제 개발 에 서 는 new 가 많이 나온다.
주입 이 잘 되 고 교체 가 편리 하 며 모든 것 을 주입 하 라 는 말 이 있 을 것 이다.
하지만:
1. 역사 코드 는 테스트 가 필요 합 니 다. 모두 비 현실 적 입 니 다.
2. 어떤 대상 은 주입 할 필요 가 없 을 정도 로 간단 하거나 예측 가능 한 미래 에 우 리 는 바 꾸 려 고 하지 않 는 다. 만약 에 jmock 을 위해 개발 자 에 게 주입 을 사용 해 야 한다 고 요구 하지 않 으 면 본말 이 뒤 바 뀌 었 다. 테스트 로 우리 의 디자인 을 결정 할 수 없다.주입 은 어떤 상황 에서 도 좋 은 것 이 아니다.
그럼 저희 가 테스트 를 해 야 되 는데 어떻게 해 야 되 죠???
jmock 의 생각 에 따라 생각해 보 세 요.
뉴 가 나 오 는 상대 도 mock 하면 되 잖 아 요.
그래서 djunit 를 찾 았 습 니 다.
사용 전 준비:
1. djunit 가 있 는 jar 가방 - 설명 할 필요 없어
2. djunit 의 eclipse 플러그 인 을 설치 하 는 것 이 좋 습 니 다.
3. testcase 의 setup 에서 MockObject Manager. initialize () 를 호출 합 니 다.방법 (DJ UnitTestCase 계승 은 필요 없 음)
4. djunit 를 통 해 시작 -- run as djunit
public class TestService extends TestCase {
@Override
public void setUp() throws Exception {
super.setUp();
MockObjectManager.initialize();
}
public void test1() throws BusinessException {
List<Bean> lst = new ArrayList<Bean>();
lst.add(new Bean());
lst.add(new Bean());
MockObjectManager.addReturnValue(CmnDAO.class, "executeQuery", lst);
// service:return new CmnDAO().executeQuery(sql);
XXXXService service= new XXXXService();
assertEquals(2, i.geItemVOs("001").length);
}
}
예 는 비교적 간단 하 다. 실제 과정 은 다음 과 같 을 수 있다.
queryData = DAO.query("select * from xxx");
... / / 각종 복잡 한 업무 처리
/ / 업무 처리 결 과 를 되 돌려 주 는 것 은 하나의 상태 일 수 있 습 니 다.
이 럴 때 나 는 조롱 하고 싶다. DAO 의 query 방법 은 나의 아 날로 그 데 이 터 를 직접 되 돌려 주 고 업무 처리, 되 돌려 줍 니 다.
마지막 으로 나의 업무 처리 가 정확 한 지 를 보 겠 다 고 단언 했다.
-------------------------------------------------------------------------
... 에 대하 여
MockObjectManager.addReturnValue
djunit 에 서 는 mock 을 원 하 는 방법 과 대응 하 는 값 을 맵 < String, List > 로 저장 합 니 다.
방법 이 실 행 될 때마다 맵 에서 대응 하 는 키 를 찾 고 없 으 면 jvm 에 맡 기 고,
있 으 면 list. get (0) 을 가 져 와 jvm 에 직접 호출 합 니 다.
그리고 list. remove (0).
즉, 같은 방법 으로 여러 번 바 뀌 었 습 니 다. MockObject Manager. addReturnValue 가 여러 번 필요 하고 순서 가 같 아야 합 니 다.
만약 add 를 여러 번 하고 싶 지 않다 면, 매번 mock 을 호출 하 는 방법 이 같은 값 으로 돌아 오 면 어떻게 해 야 합 니까?
MockObjectManager.setXXXAllTimes(Class,String method,Object returnvalue);
구체 적 인 용법 은 문서 나 소스 코드 를 본다.
테스트 도구 가 개발 에 영향 을 주어 서 는 안 되 며, 주입 할 때 주입 해 야 하 며, 필요 없 이 자신 에 게 new, 뒷걱정 하지 마 세 요.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
책 「테스트 구동 개발」을 사경하기 위한 환경 구축우선 사용할 수 없으면 시작되지 않는다. 나중에 점점 사용할 수 있게 될 것이다. 에서 Eclipse IDE for Java Developers를 다운로드하여 설치하십시오. 이제 첫 화면이 나온다. 시작 후 화면에서...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.