2013-03-18 2 views
-2

나는 클래스 FileGenerator을 가지고, 나는 어떻게해야 generateFile() 메소드에 대한 테스트를 쓰고 있어요 다음TDD : Java에서 객체 목록으로 작성된 메소드 호출을 확인하는 방법은 무엇입니까?

1)이

2 BlockAbstractFactory

에 정적 메소드 getBlockImpl (FileTypeEnum)를 호출한다) 그것은 각각의 run 메소드를 호출해야 그것은 String 매개 변수

4)를 통과하는 최종 헬퍼 클래스 FileHelper에서 정적 메소드를 CreateFile을 호출해야합니다)) (서브 클래스 방법 getBlocks에서

3 변수 차단 목록을 채워야 blockList 내의 BlockController

TDD를 사용하여 내 방법의 마지막 시나리오를 테스트하려고합니다. 나는 Runnable을 구현하는 BlockController 객체의 목록을 가지고 있고 각각이 run() 메소드를 호출하는지 확인해야한다.

는 여기에 내가 할 노력하고있어 무엇 :

public class FileGenerator { 
// private fields with Getters and Setters 

    public void generateBlocks() { 
     // 1,2 get the block manager that will return the BlockController list 
     blockManager = BlockAbstractFactory.getManager(fileType); 
     blockList = blockManager.getBlocks(); 
     // create a file using FileHelper 
     FileHelper.createFile(path); 

     // What I want to test: 
     // for each BlockController in the blockList, call the run() method 
    } 
} 

I JUnit을하고 Mockito를 사용하고 있습니다. Mockito의 문서에서 List를 모방하고 List에 대한 메소드 호출 (예 : add (T), remove (T) 등)을 객체를 나타내는 것이 아닌 방법 만 보여줍니다.

어떻게하면됩니까?

답변

1

질문을 게시하기 전에 답변을 찾았습니다. 사실 아주 간단합니다.

먼저, 당신은 당신이 Mockito를 사용해야합니다 개체 조롱해야합니다 (I 형 BlockController의 3 개 조롱 개체의 목록을 만들 수 있습니다 아래)

final BlockController mockedBlock = mock(BlockController.class); 

다음, 당신의 조롱 물체를 사용하여 목록을 만듭니다 :

fileGenerator.setBlockList(myBlockList); 
fileGenerator.generateBlocks(); 
:

List<BlockController> myBlockList = Arrays.asList(mockedBlock, mockedBlock, mockedBlock); 

는 메서드를 호출하기 전에 조롱 개체의 목록에 테스트 클래스의 목록을 설정

verify(myBlockList, times(myBlockList.size())).run(); 

이 그것 (내 FileGenerator 객체가 만들어집니다 결국 모습입니다 @ 바 방법에 대한 호출 번호가 목록의 크기와 일치하는 경우

자, Mockito로 바로 확인 방법 전) :

@Test 
public testShouldCallRunForEachBlock() { 
    final BlockController mockedBlock = mock(BlockController.class); 
    List<BlockController> myBlockList = Arrays.asList(mockedBlock, mockedBlock, mockedBlock); 

    fileGenerator.setBlockList(myBlockList); 
    fileGenerator.generateBlocks(); 

    verify(myBlockList, times(myBlockList.size())).run(); 
} 

그리고 그게 전부입니다. 이제는 루프가 구현 될 때까지 테스트가 실패합니다.

관련 문제