2011-08-17 5 views
0

FakeItEasy를 사용하여 Mocking을 시작하고 어떤 시점에서 고생했습니다. 당신이 아무거나이 있는지 확인하려면 조언을하시기 바랍니다 것,for 루프로 함수를 테스트하는 스크립트

public class PrintNumbers : IPrint { 
    public IConverter Converter { get; set; } 
    public PrintNumbers(IConverter converter) { 
     this.Converter = converter; 
    } 
    public void Print(int start = 1, int end = 100) 
    { 
     for (int count = start; count <= end; count++) 
      Console.WriteLine("{0}", this.Converter.Convert(count));   
    }  
} 

내가 인쇄 방법에 대한 테스트를 작성하려면 : 나는 아래에있는

다음은

public interface IPrint { 
    void Print(int start = 1, int end = 100); 
} 

public interface IConverter { 
    string Convert(int number); 
} 

이를 iPrint의 구현 인터페이스 for 루프는 count = start (첫 번째 매개 변수)와 함께 호출되어야하며 마지막 매개 변수를 끝내고 카운트를 증가시켜야합니다. Converter.convert (count)는

이라고합니다.
+1

무엇을 시도 했습니까? 스택 오버플로는 프로그래밍 관련 * 특정 문제를 논의하기위한 웹 사이트입니다. 그것은 '무료 코드 서비스'가 아닙니다. 이런 질문을하지 마십시오. –

답변

1

나는 당신이 테스트하고 싶은 것이 무엇인지 모르겠다. converter.Convert가 호출 되었는가? 그게 왜 중요한가요? 나에게 그것은 인 것 같습니다.은 변환 된 각 값과 함께 Console.WriteLine이 호출되었다는 것입니다. 그것을 할 수있는 몇 가지 기술이 있습니다. 하나는 WriteLine 메소드로 IOutputWriter 인터페이스를 주입하는 것이고, 이것의 기본 구현은 Console.WriteLine에 위임 할 것이고, 테스트에서는 가짜 instaed를 사용할 것입니다.

또 다른 가능성은 표준 출력 (Console.Out)을 원하는 텍스트 작성자로 리디렉션하고 이에 대해 주장하는 것입니다. 이 특정 문제를 다루는 Roy Osherove's TDD Kata 2을 살펴보십시오.

그러나 특정 값을 사용하여 일부 메서드가 호출되었다는 것을 주장하는 다른 상황이 있으므로 주어진 예제를 사용하여 테스트를 수행하는 예제를 제공 할 것입니다. 이 특별한 경우에 테스트 할 올바른 것).

var converter = A.Fake<IConverter>(); 
var printer = new PrintNumbers(converter); 

printer.Print(1, 3); 

A.CallTo(() => converter.Convert(1)).MustHaveHappened(); 
A.CallTo(() => converter.Convert(2)).MustHaveHappened(); 
A.CallTo(() => converter.Convert(3)).MustHaveHappened(); 

나는이이 많은하나 시험이 될 것이기 때문에 비록 좋은 예입니다 확실하지 않다.

관련 문제