2014-05-14 1 views
0

내가 난처한 상황에 빠진거야 ...이 내가 꽤 잘 작동있어 perform unit tests on Windows FormsPostSharp 스레딩 툴킷 측면 윈도우는 단위 테스트를 양식에 영향을 미치는 결과

에 반사와 람다 대의원를 사용하여 내 앞의 질문에 대한 후속 게시물이고, 이제 이것을 사용하여 특정 NFR을 확인할 수 있습니다.

var monitor = new SemaphoreSlim(1); 
monitor.Wait(); 
var form = new SomeForm(); 
form.SetControlProperty<TextBox>("tbFirstName", "Text", firstName); 
form.SetControlProperty<TextBox>("tbLastName", "Text", lastName); 
form.ObserveControlEvents<DataGridView>("dataGridView1", "DataSourceChanged", 
    (sender, args) => 
    { 
     Trace.WriteLine("Occured in delegate"); 
     monitor.Release(); 
    }); 
Trace.WriteLine("Executing"); 
var sw = form.ClickButton("btnSearch"); 
monitor.Wait(); 
sw.Stop(); 

그러나, 나는 [BackgroundMethod] 및 [DispatchedMethod, 테스트가 성공하지만, 데이터가 실제로 시험 형태로 삽입되지 내 검색 및 DataGridView.DataSource 업데이트 방법을 장식합니다. 즉, DataGridView에 0 개의 레코드가있는 0ms 단위로 테스트가 완료됩니다.

PostSharp 2.1.7.35 및 2.1.1.12 PostSharp Threading Toolkit을 사용하고 있습니다.

이 문제의 원인은 무엇일까요?

UnitTest 빌드 구성을 만들고 SkipPostSharp 컴파일 기호를 사용하는 경로를 시도했지만 사용하기가 자연스럽지 않고 다른 문제가있었습니다. 내가 작업 공장 방법을 사용하고 delegate 내 UI 업데이트를 수행 할 경우

UPDATE

, 그냥 잘 작동합니다.

UPDATE 내가있는 BackgroundWorker를 사용하는 경우 그것은 또한 작동이

. 3

UPDATE 사실, BackgroundWorker에 제대로 작업 완료에 이벤트가 발생하지 않았다.

그래서 PostSharp는 단위 테스트를 제동하기 위해 무엇을 만들었습니까?

답변

-2

this article advice을 사용하여 CodeProject 기사에서 PostSharp의 [BackgroundMethod]SafeInvoke 확장을 성공적으로 사용할 수있었습니다. 몇 가지 오타가 있기 때문에 다음은 다시 작성하는 것입니다.

public static TResult SafeInvoke<T,TResult>(this T isi, Func<T,TResult> call) where T : ISynchronizeInvoke 
    { 
     if (isi.InvokeRequired) { 
      IAsyncResult result = isi.BeginInvoke(call, new object[] { isi }); 
      object endResult = isi.EndInvoke(result); return (TResult)endResult; 
     } 
     else 
      return call(isi); 
    } 

    public static void SafeInvoke<T>(this T isi, Action<T> call) where T : ISynchronizeInvoke 
    { 
     if (isi.InvokeRequired) isi.BeginInvoke(call, new object[] { isi }); 
     else 
      call(isi); 
    } 

시간이 절약되기를 바랍니다.

+0

이 질문에 대한 답변을 제공하지 않습니다. 비평하거나 저자의 설명을 요청하려면 게시물 아래에 의견을 남겨 둡니다. –

+0

흠 ... 내 대답은 ... 그리고 나는 단지 같은 코드를 복사하여 붙여 넣기를 게으른 것이었다. – Darek

+0

더 좋습니까? – Darek