2009-03-24 3 views
1

서비스 클라이언트가 전달하는 작업을 빌드하는 Service 클래스를 개발하는 동안 TDD (나는 newbee 임)를 따르려고합니다. 빌드 된 오브젝트는 다른 시스템으로 전달됩니다. 즉,이 서비스는 작업을 수행하지만 아무 결과도 반환하지 않습니다. 즉, 기본 제공 작업을 다른 서비스로 전달합니다. 그래서 나는 주장 할 것이 없기 때문에 어떻게 시험을 쓸 수 있는지 궁금합니다. 서비스 내의 상호 작용을 추적하기 위해 모의 (mock)를 사용하는 것에 대해 생각하고 있지만 서비스의 내부 구현에 묶여 있기 때문에 모의 (mock)를 사용하는 것이 조금 두려워요.TDD와 Service (클래스가 무엇인가를하지만 아무것도 반환하지 않습니다.)

미리 감사드립니다.

+0

- 어떤 프로그래밍 언어 (s) 예를 들어 같이 일하고 있습니까? –

답변

2

구성 요소에서 내부적으로 사용되는 구성 요소의 외부 인터페이스를 실제로 조롱하게되므로 문제는 없습니다. 이것은 정말로 조롱이 의도 된 것이며, 유스 케이스와 완벽하게 일치하는 것처럼 들립니다.

TDD를 수행 할 때 이러한 외부 서비스의 mock을 만들 수 있기 때문에 빠른 실행주기를 얻을 수 있어야합니다. 이 가짜는 쉽게 실패한 다른 시험을 쓸 수있게 해줍니다.

1

두 클래스로 나누어 볼 수 있습니다. 하나는 실행될 작업 목록을 작성하고 다른 하나는 전달 된 작업 목록을 실행합니다. 이렇게하면 작업 목록을 작성하는 코드를 직접 테스트 할 수 있습니다.

외부 시스템이 관련되어있을 때 TDD 프로세스를 보는 방법과 관련하여 다른 question에 게시 한 샘플을 추가하고 싶습니다.

, 당신은 어떤 주어진 논리가 이메일을 보내는 지 여부를 확인해야 말할 수 있습니다 파일에 에서 정보를 기록의 데이터베이스에 데이터를 저장하고, 한 번에 내가 아는 웹 서비스 (하지 를 호출 각각의 테스트를 추가하기 시작하면 ). 각 테스트에서 외부 시스템을 치고 싶지 않은 경우, 을 실제로 테스트하려면 논리가 이 될 것으로 예상하는 시스템에 호출을 수행하는지 테스트해야합니다. 따라서 사용자가 사용자를 만들 때 이메일이 인지 확인하는 테스트를 작성하면 은 논리가 종속성을 호출하는지 테스트합니다. 이메일을 보내고 전자 메일을 보낸 코드를 구현하지 않고 ( 보낸 사람을 알기 위해 외부 시스템에 액세스해야 함) 실제로 구현하지 않고 에이 테스트와 관련 논리를 쓸 수 있습니다. 그러면 가까운 작업에 집중하고 분리 시스템을 얻는 데 도움이됩니다. 그것도 해당 시스템으로 전송되는 것을 테스트 할 수 있습니다.

0

확실하지가 이런 일이 될 수 당신이 사이비 코드 그렇게 사용하는 언어 : 당신은 이것에 대해 몇 가지 세부 사항을 더 준 경우 도움이 될 수

when_service_is_passed_tasks 
    before_each_test 
    mockClients = CreateMocks of 3 TaskClients 
    tasks = GetThreeTasks() 
    myService = new TaskRouter(mockClients) 

    sends_all_to_the_appropriate_clients 
    tasks = GetThreeTasks() 
    myService.RouteTaks(tasks) 
    Assert mockClients[0].AcceptTask(tasks[0]) was called 
    Assert mockClients[1].AcceptTask(tasks[1]) was called 
    Assert mockClients[2].AcceptTask(tasks[2]) was called 

    if_one_routing_fails_all_fail 
    tasks = GetTasksWhereOneIsFailing() 
    myService.RouteTaks(tasks) 
    Assert mockClients[0].AcceptTask(*) was not called 
    Assert mockClients[1].AcceptTask(*) was not called 
    Assert mockClients[2].AcceptTask(*) was not called