走进 UnitTest for Xamarin.Forms

之前讲了 Xamarin.Forms 的 UITest

但 UnitTest 更是不可缺少的,不管写什么开发都是需要的

 

以下演示基于

  • 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) )

 

一、创建 Test 项目

在项目上添加一个 Unit Test 项目,并引用 PCL 项目,因为逻辑代码都在这里

默认是 MSTest ,当然你也可以用 NUnit Test 或者 XUnit Test,我这里就用默认的了

其次,因为项目用了 Prism 框架,所以这里也要引用 Prism,还有 Moq,最后就是下边这个样式,其他的都是连带的引用的

 

二、添加测试代码

这里很简单了,就和写其他的 Test 代码是一样的,当然要测试成功登录和失败登录了,测试就是要考虑各种情况,极限,边界,对与错等

需要的参数肯定是没有的,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);
        }

 

 三、结果

 

其实测试是有必要的,但是很多小公司都不写,一是没时间写,需求太多,人手不够。二是变化太快,写了反倒是麻烦,但从正规的开发流程和质量角度来看,都是必要的,也是团队考核的一个考察点

转载于:https://www.cnblogs.com/heyixiaoran/p/7771488.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值