2012-03-20 2 views
1

리팩토링 중에있는 기존 시스템이 있습니다.Generate() 메서드의 대리자 매개 변수에 Moq에 무엇을 제공합니까?

public class SUT 
{ 
    public delegate SaveStuff(SomeObject obj); 
    public void Generate(SaveStuff saver) 
    { 
    // Do stuff 
    var obj = new SomeObject(); 
    saver(obj); 
    } 
} 

나는 MOQ를 사용하여 아주 새로운 해요 및 호출 시간을 '절약'의 수를 계산하려면 다음과 같이

나는 실질적으로 객체를 가지고있다.

나는 여기에 SO에 대한 예제의 숫자를 본 적이 있지만 테스트

[Test] 
public void TestDelegateCall() 
{ 
    var sut = new SUT(); 
    // Prepare SUT's State... 

    var callCount = 0; 
    sut.Generate(??); 
    Assert.AreEqual(callCount,2); 
} 

은 무엇 어디가는 방법 설정에 난처한 상황에 빠진거야? 뭐야? 난 당신이 여기 MOQ를 사용할 필요가 있음을 잘 모릅니다

답변

3

, 난 당신이 수 만 수행은 다음과 그래도 문제가 해결되지 않으면

var callCount = 0 
sut.Generate(obj=>callCount++); 

:) 익명 방법과 폐쇄을 활용 다음 방금 수 있다고 생각합니다 명시 적 위임자 설정을 사용하십시오.

var callCount = 0 
SaveStuff actionCounter = delegate(SomeObject obj) 
    { 
     callCount++; 
    }; 
sut.Generate(actionCounter); 
+0

컴파일 할 수 없지만 필요한 곳이 있습니다. 'SaveStuff actionCount = 대리인 (SomeObject obj) {callCount ++; }; 나를 올바른 방향으로 가리켜 주셔서 감사합니다. –

+0

달콤한! 간단한 예제로 변경 한 후, R #을 사용하면'sut.Generate (obj => {callCount ++;}); '를 더 깔끔하게 처리 할 수있어서 다른 문제를 해결할 수있었습니다. 방금 내 이해를 크게 올렸습니다. 고맙습니다! –

+0

줄을 줄이려면 익명 방법으로 작동하도록 내 대답을 업데이트했습니다. 그러나 이전 대리자 접근 방식을 사용하도록 코드를 업데이트했습니다. 나는 둘 다 테스트했고 모두 작동해야합니다. 당신은 심지어 당신의 마지막 코멘트에서 괄호가 필요 없다 :) –

관련 문제