2011-09-08 2 views
2

자동화 프레임 워크 White을 사용하여 통합 테스트를 만들었습니다.통합 테스트 내에서 생성 된 WPF 창을 자동화 할 수있는 White.Core.UIItems.WindowItems.Window의 인스턴스를 얻는 방법은 무엇입니까?

var app  = Application.Launch("WPFIntegrationTest.exe"); 
var window = app.GetWindow("MainWindow"); 

그러나, 나는 '발사'새로운 프로세스의 응용 프로그램없이 White.Core.UIItems.WindowItems.Window의 인스턴스를 좀하고 싶습니다 :이 통합 테스트의 시작이다. 이렇게하면 MainWindow에있는 종속성을 주입 할 수 있으므로 선택 적으로 조롱하거나 스텁시킬 수 있습니다.

var myWindow = new MainWindow(); 
var window = White.Core.UIItems.WindowItems.Window(myWindow); 

나는 화이트 자동화 프레임 워크를 사용하여이를 달성 할 수있는 방법이 있나요 : 내가 무엇을 찾고의 예로서

이 내가 쓸 수하고자하는 코드는?

답변

1

흰색 테스트 코드와 테스트중인 응용 프로그램이 같은 프로세스에서 실행되는 것으로 들리는 것 같습니다.

http://white.codeplex.com/wikipage?title=Other%20questions

수있는 응용 프로그램과 동일한 과정에 흰색 테스트 실행이 화이트 FAQ 페이지에서 질문 # 9 참조 - 나는 화이트 저자 무엇을 말할 수에서

는 것을 단념?

아니요.이 모드에서 작동하지 않도록 설계되었으므로 스레딩 문제가 발생할 수 있습니다. 원칙적으로 테스트 코드가 서로 독립적으로 발전 할 때 테스트 코드와 응용 프로그램을 연결하는 것은 좋지 않습니다.

아직도, 어쩌면 아래 문서가 도움이 될 것입니다 당신이 원하는 것을 할 :

http://msdn.microsoft.com/en-us/magazine/cc163864.aspx

은 위의 문서에서의 코드를 확인 "그림 5 - 앱을 시작".

작성자의 접근 방식은 설명하는 것과 약간 비슷합니다. 코드가 어셈블리를로드하고이를 사용하여 Form 객체의 인스턴스를 만든 다음 Application.Run이 호출되도록 별도의 스레드를 시작합니다. 양식.

AUT가 실행되면 주 스레드에서 흰색을 사용하여 첨부 할 수 있습니다.

아마도이 기술을 사용하면 원하는대로 AUT를 조작 할 수 있습니다. 그냥 편의를 위해

여기 기사에서 그림 5의 : 대답, 빌에 대한

static Form LaunchApp(string exePath, string formName) 
{ 
    Thread.Sleep(delay); 
    Assembly a = Assembly.LoadFrom(exePath); 
    Type formType = a.GetType(formName); 
    Form resultForm = (Form)a.CreateInstance(formType.FullName); 
    Thread t = new Thread(new ThreadStart(new AppState(resultForm).RunApp)); 
    t.ApartmentState = ApartmentState.STA; 
    t.IsBackground = true; 
    t.Start(); 
    return resultForm; 
} 

private class AppState 
{ 
    public AppState(Form f) { FormToRun = f; } 
    public readonly Form FormToRun; 
    public void RunApp() 
    { 
    Application.Run(FormToRun); 
    } 
} 
+0

감사합니다. 이것은 내가 바라는 바를 정확하게 본다. – playitcool

관련 문제