수색…


비고

  • 이 라이브러리에서 내부적으로 사용하는 DI 컨테이너 / 해석기는 Autofac입니다.
  • 테스트 프레임 워크는 NUnit 3x입니다.
  • 이 라이브러리를 Xamarin.Forms 프레임 워크와 함께 사용할 수 있어야합니다.
  • 소스 및 예제 프로젝트는 여기에서 볼 수 있습니다.

NUnit Test Runner를 사용하여 명령 및 탐색을위한 간단한 Specflow

왜 우리가 이것을 필요로합니까?

현재 Xamarin.Forms에서 단위 테스트를 수행하는 방법은 플랫폼 러너를 통해 이루어 지므로 테스트는 iOS, Android, Windows 또는 Mac UI 환경 에서 실행해야합니다. IDE에서 테스트 실행

자 마린도 함께 멋진 UI 테스트를 제공 Xamarin.TestCloud의 제공하지만, BDD dev에 관행을 구현하고 로컬 또는 빌드 서버에 단위 테스트 러너에 싸게 실행하는 동안, ViewModels 및 명령을 테스트 할 수있는 능력을 가지고 싶은 경우,이 없다 내장 방식.

저는 Xamarin.Forms에서 Specflow를 사용하여 시나리오 정의에서 ViewModel까지 응용 프로그램에 사용 된 MVVM 프레임 워크 ( XLabs , MVVMCross , Prism 등 )와 독립적으로 기능을 쉽게 구현할 수있는 라이브러리를 개발했습니다.

BDD를 처음 사용하는 경우에는 Specflow out을 선택하십시오.

용법:

  • 아직 설치하지 않았다면 여기 (또는 Visual Studio IDE)에서 specflow Visual Studio 확장 프로그램을 설치하십시오. https://visualstudiogallery.msdn.microsoft.com/c74211e7-cb6e-4dfa-855d-df0ad4a37dd6

  • Xamarin.Forms 프로젝트에 클래스 라이브러리를 추가하십시오. 그것이 당신의 테스트 프로젝트입니다.

  • 에서 SpecFlow.Xamarin.Forms 패키지를 추가 nuget 테스트 프로젝트에.

  • 'TestApp'를 상속 한 테스트 프로젝트에 클래스를 추가하고 뷰 / 뷰 모델 쌍을 등록하고 DI 등록을 아래에 추가하십시오.

    public class DemoAppTest : TestApp
    {
        protected override void SetViewModelMapping()
        {
            TestViewFactory.EnableCache = false;

            // register your views / viewmodels below
            RegisterView<MainPage, MainViewModel>();
        }

        protected override void InitialiseContainer()
        {
            // add any di registration here
            // Resolver.Instance.Register<TInterface, TType>();
            base.InitialiseContainer();
        }
    }
  • Specflow 훅을 추가하기 위해 SetupHook 클래스를 테스트 프로젝트에 추가하십시오. 위에서 작성한 클래스와 앱의 초기 viewmodel을 제공하여 아래의 테스트 애플리케이션을 부트 스트랩해야한다.
    [Binding]
    public class SetupHooks : TestSetupHooks
    {   
        /// <summary>
        ///     The before scenario.
        /// </summary>
        [BeforeScenario]
        public void BeforeScenario()
        {
            // bootstrap test app with your test app and your starting viewmodel
            new TestAppBootstrap().RunApplication<DemoAppTest, MainViewModel>();
        }
    }
  • xamarin.forms 프레임 워크를 무시하기 위해 catch 블록을 xamarin.forms 뷰 코드 비헤이비어에 추가해야합니다. 그러면 xamarin.forms 프레임 워크에서 앱을 실행해야합니다 (원하지 않는 작업).
        public YourView()
        {
            try
            {
                InitializeComponent();
            }
            catch (InvalidOperationException soe)
            {
                if (!soe.Message.Contains("MUST"))
                    throw;
            }
        }
  • 프로젝트에 specflow 기능 추가 (vs specflow 확장과 함께 제공되는 vs specflow 템플릿 사용)

  • TestStepBase를 상속 한 step 클래스를 생성 / 생성하여 scenarioContext 매개 변수를베이스에 전달합니다.

  • 탐색 서비스 및 도우미를 사용하여 탐색, 명령 실행 및 뷰 모델 테스트를 수행하십시오.

  [Binding]
    public class GeneralSteps : TestStepBase
    {
        public GeneralSteps(ScenarioContext scenarioContext)
            : base(scenarioContext)
        {
            // you need to instantiate your steps by passing the scenarioContext to the base
        }

        [Given(@"I am on the main view")]
        public void GivenIAmOnTheMainView()
        {
            Resolver.Instance.Resolve<INavigationService>().PushAsync<MainViewModel>();           
            Resolver.Instance.Resolve<INavigationService>().CurrentViewModelType.ShouldEqualType<MainViewModel>();
        }
        
        [When(@"I click on the button")]
        public void WhenIClickOnTheButton()
        {
            GetCurrentViewModel<MainViewModel>().GetTextCommand.Execute(null);
        }

        [Then(@"I can see a Label with text ""(.*)""")]
        public void ThenICanSeeALabelWithText(string text)
        {           
            GetCurrentViewModel<MainViewModel>().Text.ShouldEqual(text);
        }
    }

MVVM의 고급 사용법

첫 번째 예제를 추가하려면 응용 프로그램 내에서 발생하는 탐색 문을 테스트하기 위해 ViewModel에 탐색에 대한 후크를 제공해야합니다. 이것을 달성하기 위해서 :

  • nuget의 SpecFlow.Xamarin.Forms.IViewModel 패키지를 PCL Xamarin.Forms 프로젝트에 추가하십시오.
  • ViewModel에 IViewModel 인터페이스를 구현합니다. 이렇게하면 Xamarin.Forms INavigation 속성이 노출됩니다.
  • public class MainViewModel : INotifyPropertyChanged, IViewModel.IViewModel { public INavigation Navigation { get; set; }
  • 테스트 프레임 워크가이를 선택하고 내부 탐색을 관리합니다.
  • XLabs , MVVMCross , Prism 과 같은 응용 프로그램에 MVVM 프레임 워크를 사용할 수 있습니다 .ViewModel에 IViewModel 인터페이스가 구현되어 있으면 프레임 워크에서이를 가져옵니다.


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow