2013-01-10 4 views
0

제 질문은 this 질문과 관련이 있습니다. 그러나 저는 어떻게 든 한 단계 더 나아가 nunit을 사용하여 테스트 프레임 워크를 구현했습니다.Revit API가있는 BDD/TDD

Revit에서 테스트 프레임 워크 addin을 실행하면 테스트 프레임 워크가 어떻게 든 테스트 어셈블리를 잠그기 때문에 테스트 어셈블리를 다시 컴파일 할 수 없습니다. 이 문제를 해결하기 위해 섀도 복사본 만들기를 시도 했으므로 nunit 테스트 러너가 복사 된 어셈블리에서 실행됩니다. 그러나 일단 처음으로 테스트를 실행하면 테스트 실행은 업데이트 된 복사본에서 작동하지 않습니다. 그것은 테스트 주자가 DLL을 캐시하고 항상 캐시 된 복사본에 대한 테스트를 실행하려고하는 것과 같습니다.

그래서 테스트 어셈블리가 업데이트 될 때마다 Revit을 닫은 후 다시 실행하여 실제 테스트를 실행해야합니다. Revit 용 테스트 프레임 워크를 구현 한 가장 큰 이유는 Revit API를 사용하여 BDD/TDD를 수행 할 수 있기 때문입니다.

이 내가 테스트를 실행하는 방법의 코드는 다음과 같습니다

TestPackage theTestPackage = new TestPackage(testDll); 
    RemoteTestRunner testRunner = new RemoteTestRunner(); 
    testRunner.Load(theTestPackage); 
    TestResult testResult = testRunner.Run(new NullListener()); 

사람이 어떻게이 문제를 해결하는 어떤 생각을 가지고 있습니까?

답변

1

Assembly.Load(byte[]) 메서드를 사용하여 테스트를 위해 assemby를로드 할 수 있습니다. 테스트 러너가이 문제를 처리 할 수 ​​있는지 확신 할 수 없지만 메모리에서 바이트 스트림에서로드되는 작업을 수행 할 어셈블리를 제공합니다. 따라서 원본 어셈블리 파일은 언제든지 다시 컴파일 할 수 있으며이 어셈블리의 동시 버전을 원하는만큼로드 할 수 있습니다. 그것들은 모두 별개이며, 각각 다른 유형이 있습니다.

런타임시 플러그인로드 및 테스트를 위해 RevitPythonShell 스크립트 loadplugin.py과 유사한 전략을 사용합니다. 이것은 XAML에 정의 된 WPF 컨트롤을 제외하고는 꽤 잘 작동하는 것 같습니다. 필자는 XAML 파서와 로더가 형식의 캐시를 유지하지만 시간 제약으로 인해이 형식을 조사하지 못했을 것으로 판단됩니다.

+0

감사합니다. Daren, 결국 nunit TestAssemblyBuilder 클래스를 수정하여 바이트 배열에서 어셈블리를로드해야했습니다. 이제 Revit으로 TDD 몇 가지를 시작할 수 있습니다. 언급 한 XAML 테스트의 경우 설치가 확실하지 않지만 MVVM을 사용하면서 실제로 컨트롤을 테스트하지는 않습니다. 난 그냥 ViewModels를 테스트합니다. – alital