走進 UnitTest for Xamarin.Forms 走進 UITest for Xamarin.Forms

以前講了 Xamarin.Forms 的 UITesthtml

但 UnitTest 更是不可缺乏的,無論寫什麼開發都是須要的框架

 

如下演示基於post

  • WIN 10 17017 Preview
  • VS 2017 15.4
  • Visual Studio Emulator for Android ( 5.5" Marshmallow(6.0.0) XXHDPI Phone API Level 23(Marshmallow, 6.0.0) )

 

1、建立 Test 項目測試

在項目上添加一個 Unit Test 項目,並引用 PCL 項目,由於邏輯代碼都在這裏url

默認是 MSTest ,固然你也能夠用 NUnit Test 或者 XUnit Test,我這裏就用默認的了spa

其次,由於項目用了 Prism 框架,因此這裏也要引用 Prism,還有 Moq,最後就是下邊這個樣式,其餘的都是連帶的引用的orm

 

2、添加測試代碼htm

這裏很簡單了,就和寫其餘的 Test 代碼是同樣的,固然要測試成功登陸和失敗登陸了,測試就是要考慮各類狀況,極限,邊界,對與錯等blog

須要的參數確定是沒有的,Moq 就是來搞個假的參數的,最終結果就是看 LoginCommand 是否執行過,錯誤確定是不執行的,或者錯誤時檢查返回的錯誤信息等,這裏就建單點,直接看 LoginCommand 是否執行吧開發

        [TestMethod]
        public void TestSuccessLogin()
        {
            var navigationService = new Mock<INavigationService>();
            var eventAggregator = new Mock<IEventAggregator>();
            var pageDialogService = new Mock<IPageDialogService>();
            var loginPageViewModel = new LoginPageViewModel(navigationService.Object, eventAggregator.Object, pageDialogService.Object)
            {
                Username = "Name",
                Password = "Password"
            };

            var loginCommand = loginPageViewModel.LoginCommand;

            Assert.IsNotNull(loginCommand);
            Assert.IsTrue(loginCommand.CanExecute("DataCabinPage"));

            loginCommand.Execute("DataCabinPage");
            navigationService.Verify(m => m.NavigateAsync("DataCabinPage", null, null, true), Times.Once);
        }

        [TestMethod]
        public void TestFaildLogin()
        {
            var navigationService = new Mock<INavigationService>();
            var eventAggregator = new Mock<IEventAggregator>();
            var pageDialogService = new Mock<IPageDialogService>();
            var loginPageViewModel = new LoginPageViewModel(navigationService.Object, eventAggregator.Object, pageDialogService.Object);

            pageDialogService
                .Setup(m => m.DisplayAlertAsync("Error", "Wrong Username or Password", "OK!"))
                .Returns(Task.FromResult(true));

            var loginCommand = loginPageViewModel.LoginCommand;

            Assert.IsNotNull(loginCommand);
            Assert.IsTrue(loginCommand.CanExecute("DataCabinPage"));

            loginCommand.Execute("DataCabinPage");
            navigationService.Verify(m => m.NavigateAsync("DataCabinPage", null, null, true), Times.Never);
        }

 

 3、結果

 

其實測試是有必要的,可是不少小公司都不寫,一是沒時間寫,需求太多,人手不夠。二是變化太快,寫了反卻是麻煩,但從正規的開發流程和質量角度來看,都是必要的,也是團隊考覈的一個考察點

相關文章
相關標籤/搜索