2010-01-08 3 views
2

(유창 NHibernate에 매핑, 즉 정말 관련이없는 비록) 나는 다음과 같은 코드/using이의 무리에 싸여 시도했다 catch 블록 :도움말 시험 방법에 <T> 대표

new PersistenceSpecification<Entry>(session) 
    .CheckProperty(e => e.Id, "1") 
    .VerifyTheMappings(); 

도우미 메서드 (여기에 내가 usingtry/catch 블록을 두는 곳)에 전달할 수 있도록이 리팩터링을하고 싶습니다. 나는 그것이

  • Entry은 일반적인 매개 변수로 제공해야 using 문 중 하나에 의해 제공 될

    1. session 필요하다 싶은 이에 대한

      내 요구 사항이 작동하는, 그래서 내가 할 수있는 다양한 객체의 테스트 매핑

    2. .CheckProperty(e => e.Id, "1").VerifyTheMappings()을 (테스트 메소드에서) 인수를 정의 할 때 PersistenceSpecification<T>에서 호출되는 것으로 대체 할 수 있어야합니다.

    기본적으로, 나는 같은 것을 할 싶습니다

    var testAction = new PersistenceSpecification<Entry>(session) 
             .CheckProperty(e => e.Id, "1") 
             .VerifyTheMappings(); 
    
    HelpTestMethod(testAction) 
    

    하지만 만족스러운 위의 요구 사항을.

  • 답변

    2

    무엇과 같이 약 :

    Action<PersistenceSpecification<Entry>> testAction = pspec => pspec 
           .CheckProperty(e => e.Id, "1") 
           .VerifyTheMappings(); 
    
    HelpTestMethod<Entry>(testAction); 
    
    public void HelpTestMethod<T>(Action<PersistenceSpecification<T>> testAction) 
    { 
        using(var session = new SessionFactory().CreateSession(...)) 
        { 
         testAction(new PersistenceSpecification<T>(session)); 
        } 
    } 
    
    +0

    감사합니다! 코드를 약간 수정해야했습니다. 예를 들어, 익명 형식의 변수에 람다를 할당 할 수는 없지만 이제는 매력처럼 작동합니다! 내가 작성한 변경 사항을 반영하기 위해 게시물을 수 분 내에 편집 할 것이므로 다음 사람은이를 통해 더 많은 혜택을 얻을 수 있습니다. –