'' 에서 '와' @InjectMocks 모크리토 프레임워크입니다 @Mock 차이가 뭘까?
'' @Mock 조룽 만듭니다. 이 클래스의 인스턴스를 사용한다 '는' @InjectMocks 및 (또는 '@Spy') 로 만들어진 '@Mock 않는비즈니스 비꼬는 데 쓰인다' 를 이 주석입니다 인스턴스입니다.
사용해야 합니다. (이) '이' @RunWith (모크리토준이트루너스클레스) '또는' 모크리토스니스모크스 초기화하려면 투입 및 그 비꼬는 데 쓰인다.
@RunWith(MockitoJUnitRunner.class)
public class SomeManagerTest {
@InjectMocks
private SomeManager someManager;
@Mock
private SomeDependency someDependency; // this will be injected into someManager
//tests...
}
샘플 코드 진단트리로 @Mock @InjectMocks '와' '어떻게' 였다.
우리는 '게임' 와 '선수' 라고 구분된다.
class Game {
private Player player;
public Game(Player player) {
this.player = player;
}
public String attack() {
return "Player attack with: " + player.getWeapon();
}
}
class Player {
private String weapon;
public Player(String weapon) {
this.weapon = weapon;
}
String getWeapon() {
return weapon;
}
}
'클래스' 플레이어 '를 확인할 수 있듯이' 게임 '공격' 리셋합니다 합니다.
@RunWith(MockitoJUnitRunner.class)
class GameTest {
@Mock
Player player;
@InjectMocks
Game game;
@Test
public void attackWithSwordTest() throws Exception {
Mockito.when(player.getWeapon()).thenReturn("Sword");
assertEquals("Player attack with: Sword", game.attack());
}
}
// you don't have to do this
Game game = new Game(player);
'행동' 주석 @Spy 사용하여 동일한 대화할거에요 얻을 수 있다. 설사 속성 이름이 다르다.
@RunWith(MockitoJUnitRunner.class)
public class GameTest {
@Mock Player player;
@Spy List<String> enemies = new ArrayList<>();
@InjectMocks Game game;
@Test public void attackWithSwordTest() throws Exception {
Mockito.when(player.getWeapon()).thenReturn("Sword");
enemies.add("Dragon");
enemies.add("Orc");
assertEquals(2, game.numberOfEnemies());
assertEquals("Player attack with: Sword", game.attack());
}
}
class Game {
private Player player;
private List<String> opponents;
public Game(Player player, List<String> opponents) {
this.player = player;
this.opponents = opponents;
}
public int numberOfEnemies() {
return opponents.size();
}
// ...
테스트 클래스 '클래스' 에 주석을 단 @InjectMocks 테스트되었습니다 함께 합니다. 이 class 를 투입할 수 있는 알 수 있는 모크리토 비꼬는 데 쓰인다.
@InjectMocks
private SomeManager someManager;
높여가면서 점프, 클래스, 이 경우 구체적인 방법 또는 객체에는 인사이드라면 저희에게는힘과 지정할 수 있습니다 ',' 섬만거 함께 대체됩니다 비꼬는 데 쓰인다.
@Mock
private SomeDependency someDependency;
'클래스', '내' 섬만거 예제에서와 소메데펜덴시 적립율은 비웃었다.
예를 들어
@Mock
StudentDao studentDao;
@InjectMocks
StudentService service;
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
}
Here we need 이 서비스에 대한 다오 클래스 구분된다. 그래서 우리는 정보기술 (it) 및 it 서비스 분야에서 조룽 클래스용 인스턴스입니다. 스프링 프레임워크 마찬가지로 모든 @Autowired 콩 볶아 @InjectMocks 통해 투입될 수 있는 조 롱하였기 @Mock 의해 주니츠 및 기능을 추가할 수 있습니다.
이러한 방법을 사용한다 (이) '및' 모크리토아노테이션s.니트모크스 초기화 그들을 위해 모든 테스트 방법을 사용해야 하는지 전화를 그래서 비꼬는 데 쓰인다 '설정 ()' 메서드입니다.
,) 는 이를 기반으로 한 " 조롱하는 framework" 모크리토 프레임워크입니다 만들 수 있는 기능을 제공하는 조룽 객체 (옛 조건에 따라, 이러한 객체를 위한 작업을 진행하면서 션트 션트 데프수드 기능을 호출할 수 있습니다) 즉, 실제 사용자 코드는 데프수드 객체에는 객체인지 조룽 행하였 모방하고 있는 프록시 객체를 생성할 수 있는 조롱하는 레임워크. 기본적으로 사용자 테스트를 통해 일반 유닛 테스트를 할 수 있는 객체를 사용하여 조룽 틀렸다니까 안티그라티오날 테스트
테스트 프레임워크입니다 모크리토 는 오픈 소스 자바 릴리즈됨 go-dell MIT 라이선스를 " 조롱하는 것이 깨끗하고 아름다운 테스트할 수 있는 framework", 쓰기, 간단한 API. 그러나 여기에는 몇 가지 조롱하는 프레임워크와도 Java 는 기본적으로 두 가지 유형의 조룽 객체에는 있는 공간을 통해 구축 및 수준들과 않는비즈니스 구현됩니까 클래스용 않는비즈니스 수준들과 프레임워크와도, 가상본 통해 다시 매핑.
의존성 주입 프레임워크와도 너회의 프록시 객체를 수정할 수 없이 봄이 오는 같은 코드, 그 결과 예상대로 반환되므로 불렀으매 조룽 객체에는 특정 방법이 있을 것으로 기대하고 있다.
이 후 주석이 추가된 인스턴스 및 필드 테스트 객체에는 인스턴스화합니다 @InjectMocks '주석' 을 (를) '' 또는 '@spy @mock 사용한다' 에 개인 필드 테스트 객체에는.
(이) ',' 모크리토아노테이션s.니트모크스 호출하십시오 리셋이나 테스트 객체에는 re 초기화되는지 할 시 '/' 와 '이' @before @beforemethod 명심해 비꼬는 데 쓰인다, 주석.
장점은 통해 얻을 수 없는 don& @Tom 외곽진입 언급한 것입니다, 따라서 모든 구성자를 만들 수 있는 # 39, 섬만거 제한하는 클라이언트뿐 인스턴스화합니다 거잖나.
@RunWith(MockitoJUnitRunner.class)
public class SomeManagerTest {
@InjectMocks
private SomeManager someManager;
@Mock
private SomeDependency someDependency; // this will be injected into someManager
//You don't need to instantiate the SomeManager with default contructor at all
//SomeManager someManager = new SomeManager();
//Or SomeManager someManager = new SomeManager(someDependency);
//tests...
}
해당 응용 프로그램 디자인에 따라 표시할지를 방관하겠나 좋습니다.
여기서 'vs' @InjectMocks @Mock 대한 설명을 할 때 많은 사람들이 '큰'. 하지만 난 맘에들었어요 lionbridge 테스트 및 응용 프로그램을 작성해야 합니다 우리가 이런 식으로 ',' t need to # 39 shouldn& @InjectMocks 사용합니다.
더 이상 판독값 참조로는 함께 소개합니다. https://tedvinke.wordpress.com/2014/02/13/mockito-why-you-should-not-use-injectmocks-annotation-to-autowire-fields/
@mock '는' 의 '동시에' @InjectMocks 선언하는 데 사용되는 / 조룽 참조들이 콩, 콩, 이를 위해 이 조룽 종속적이지만 데 사용되며, 테스트 만들고 있습니다.
예를 들면 다음과 같습니다.
public class A{
public class B b;
public void doSomething(){
}
}
a 클래스 '시험':
public class TestClassA{
@Mocks
public class B b;
@InjectMocks
public class A a;
@Test
public testDoSomething(){
}
}
주석 조룽 필드 테스트 객체에는 붙여넣습니다 자동으로 @injectmocks 투입할 수 있는 사용할 수 있습니다.
아래에 있는 이 사용된 다타마프 조룽 다탈리브라리 꽂으십시오 uxfs @InjectMocks 했다.
@Mock
Map<String, String> dataMap ;
@InjectMocks
DataLibrary dataLibrary = new DataLibrary();
@Test
public void whenUseInjectMocksAnnotation_() {
Mockito.when(dataMap .get("aData")).thenReturn("aMeaning");
assertEquals("aMeaning", dataLibrary .getMeaning("aData"));
}
@Injectmocks 것을 알 수 있는 '대한' 이 사용되지 않는
> @InjectMocks 및 스케줄링합니다 제거하기 위해 모크리토 3/4 에 업신 여기다.
[답변 및 링크] 및 [2] 의 @avp 따를 수 있습니다.
왜 > 린젝트모크스 주석을 오토어 필드를 사용하지 않아야 합니다.
[2] # 51870960 :https://stackoverflow.com/questions/16467685/difference-between-mock-and-injectmocks/51870960