JMockit 간편 사용
JMockit 와 관련 된 요소 소개:
@Tested 와@Injectable @Tested 대상 이 null 인지 여 부 를 판단 하 는 것 은 적절 한 구조 기 를 통 해 초기 화 되 며,@Injectable 의 인 스 턴 스 는@Tested 에 자동 으로 주 입 됩 니 다.@Mocked @Mocked 수식 의 인 스 턴 스 는 인 스 턴 스 대응 클래스 의 모든 인 스 턴 스 를 mock 으로 제거 합 니 다(구조 방법 이 든 private 든 proctected 방법 이 든).Expectations 원 하 는 행 위 를 녹화 하 는 블록 은 일반적으로 Expectations 류 와 NonStrictExpectations 류 에 의 해 정의 되 고 Expectations 류 로 정 의 된 경우 mock 대상 이 실 행 될 때 Expectations 블록 에서 정 의 된 순서에 따라 순서대로 호출 할 수 있 으 며 다 중 호출 도 적 게 호출 할 수 없 으 며 Verifications 블록 을 생략 할 수 있 습 니 다.NonStrictExpectations 클래스 로 정 의 된 것 은 이러한 제한 이 없 기 때문에 검증 이 필요 하 다 면 Verifications 블록 을 추가 해 야 합 니 다.result 와 times 는 모두 내 정 된 구성원 변수 입 니 다.result 는 녹화 행위 의 반환 값 을 다시 정의 할 수 있 고 심지어 Delegate 를 통 해 행 위 를 다시 정의 할 수 있 으 며 times 는 녹화 행위 의 발생 횟수 를 기대 합 니 다.Expectations 에서 발생 하 는 호출 은 모두 mock 입 니 다.Deencapsulation Mock 개인 방법 과 개인 속성 에 사용 합 니 다.간단 한 예제:
package com.zero.jmockit;
public class Utils {
private static String URL_STRING = "http://www.sina.com.cn";
private static void deal() {
System.out.println("deal() " + URL_STRING);
}
public static String getObject(JMockitObject object, String str) {
deal();
System.out.println("getObject() ");
return URL_STRING + str;
}
}
package com.zero.jmockit;
public class UserService {
public String getUserName(int id) {
return "hello";
}
}
package com.zero.jmockit;
import javax.annotation.Resource;
public class JMockitObject {
@Resource
private UserService userService;
public void dealUser() {
String name = userService.getUserName(1);
System.out.println("userService.getUserName() : " + name);
sys(name);
}
private void sys(String name) {
System.out.println("sys() : " + name);
}
public String getString() {
getObject(this, "/zero");
return Utils.getObject(this, "/zero");
}
private void getObject(JMockitObject object, String str) {
System.out.println("--------");
}
}
package com.zero.jmockit;
import org.junit.*;
import org.junit.runner.RunWith;
import mockit.*;
import mockit.integration.junit4.JMockit;
@RunWith(JMockit.class)
public final class JMockitTest {
@Tested
@Mocked
private JMockitObject jMockitObject;
@Injectable
private UserService userService;
@Test
public void testDealUser() {
new NonStrictExpectations() {//
{
userService.getUserName(anyInt);//mock public
result = "zero";// returns("zero");
times = 1;
Deencapsulation.invoke(jMockitObject, "sys", anyString);//mock private
// sys() , result, , result = null;
result = null;
}
};
jMockitObject.dealUser();//
}
@Test
public void testSys() {
Deencapsulation.invoke(jMockitObject, "sys", "Hello World!");// private
}
@Test
public void testStaticField() {// mock
new NonStrictExpectations(Utils.class) {
{
Deencapsulation.setField(Utils.class, "URL_STRING",
"www.baidu.com");
}
};
// :
// new MockUp<Utils>() {
// {
// //
// Deencapsulation.setField(Utils.class, "URL_STRING",
// "www.baidu.com");
// }
// };
String str = Deencapsulation.getField(Utils.class, "URL_STRING");
Assert.assertEquals("www.baidu.com", str);
}
@Test
public void testStaticFunction() {// mock
new MockUp<Utils>() {
@Mock
private void deal() {// MockUp static , Mock , @Mock
System.out.println("mock deal() ");
}
};
Deencapsulation.invoke(Utils.class, "deal");
}
@Test
public void testGetString() {
new NonStrictExpectations() {
{
Deencapsulation.invoke(jMockitObject, "getObject",
withAny(JMockitObject.class), withAny(String.class));// any , ;
// withAny(JMockitObject.class), anyString);
}
};
new NonStrictExpectations(Utils.class) {
{
Utils.getObject((JMockitObject) any, anyString);
returns("zero");
}
};
Assert.assertEquals("zero", jMockitObject.getString());
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.