之前讲了 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);
}

三、结果

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

走进 UnitTest for Xamarin.Forms的更多相关文章

  1. 走进 UITest for Xamarin.Forms

    上一篇  走进 Prism for Xamarin.Forms 讲了简单的创建一个项目,然后添加了几个页面来回切换,这篇想先搞下 UITest 官方详细地址:https://developer.xam ...

  2. 走进 Prism for Xamarin.Forms

    一.使用环境 OS:Win 10 16273 VS:VS2017- 15.3.4 Xamarin:4.6.3.4,nuget:2.4 Android Emulator:Visual Studio fo ...

  3. 走进 MvvmLight for Xamarin.Forms

    一.Xamarin.Forms 不使用框架时的绑定 需要注意的是BindingContent,不是DataContent <ContentPage xmlns="http://xama ...

  4. 走进 Xamarin Test Recorder for Xamarin.Forms

    此篇是承接之前 走进 UITest for Xamarin.Forms 的,所以如果没有看过之前的可以先看下之前的 UITest 比起上一篇纯敲代码只适合程序员的 UITest ,这一篇不管是程序员还 ...

  5. 走进 Visual Studio Mobile Center for Xamarin.Forms

    前几篇分别介绍了 Xamarin.Forms 的 MVVM 的 Prism,UITest,Nuint Test,那这样算下来,代码部分基本结构都有了(逻辑就先忽略吧) 那接下来就应该是自动 Build ...

  6. xamarin.forms新建项目android编译错误

    vs2015 update3 新建的xamarin.forms项目中的android项目编译错误.提示缺少android_m2repository_r22.zip,96659D653BDE0FAEDB ...

  7. Xamarin.Forms 简介

    An Introduction to Xamarin.Forms 来源:http://developer.xamarin.com/guides/cross-platform/xamarin-forms ...

  8. Xamarin.Forms 免费电子书

    Xamarin Evolve 正在举行,现在已经放出2本免费的Xamarin.Forms 免费电子书,据现场的同学说这两天还有Xamarin.Forms 重磅消息发布: Creating Mobile ...

  9. 老司机学新平台 - Xamarin Forms开发框架之MvvmCross插件精选

    在前两篇老司机学Xamarin系列中,简单介绍了Xamarin开发环境的搭建以及Prism和MvvmCross这两个开发框架.不同的框架,往往不仅仅使用不同的架构风格,同时社区活跃度不同,各种功能模块 ...

随机推荐

  1. JavaScript中Unicode值转字符

    在JavaScript中,将Unicode值转字符的方法: <!DOCTYPE html> <html> <head> <meta charset=" ...

  2. How to solve “Device eth0 does not seem to be present, delaying initialization” error

    Today, I encountered with a strange error after I cloned CentOS 6 guest machine in Oracle VirtualBox ...

  3. WPF DataGrid ListView 等等 改变 选中行 颜色;以及 不变的原因

    WPF中改变选中行的颜色是很简单的,就是用触发器:比如:以DataGrid为例: DataGrid.RowStyle Style TargetType= DataGridRow SetterPrope ...

  4. EasyUI Tree递归方式获取JSON

    最近需要用到EASYUI中的TREE功能,以前我是直接拼接成<UL><LI>发现这样拼完之后在更改树后对树的刷新不是很理想,现改用JSON格式,首先分析TREE中JOSN格式如 ...

  5. 2015/9/1 Python基础(6):列表

    列表和字符串类型很相似,是同样的序列式数据类型.但是字符串只能由字符组成,列表可以保留任意数目的Python对象的灵活的容器.Python的列表比C的数组要灵活,数组里面只能是一种类型,列表可以有多种 ...

  6. [Luogu 2146] NOI2015 软件包管理器

    [Luogu 2146] NOI2015 软件包管理器 树剖好题. 通过对题目的分析发现,这些软件构成一棵树,\(0\) 是树根. 每下载一个软件,需要下载根到这个软件的路径上的所有软件: 每卸载一个 ...

  7. linux时区修定转

    https://blog.csdn.net/feng12345zi/article/details/80348501

  8. elk相关

    curl http://localhost:9200/_aliases?pretty=1 #列出elk中所有索引

  9. 课下加分项目 MYPWD 20155335 俞昆

    Mypwd 的解读与实现 20155335 linux下pwd命令的编写 实验要求: 1 .学习pwd命令 2 . 研究pwd实现需要的系统调用(man -k; grep),写出伪代码 3 .实现my ...

  10. 2016-2017 2 20155335《java程序设计》第四周总结

    #  20155335    <Java程序设计>第四周学习总结 ##  教材学习内容总结 继承,在本职上是特殊到一般的关系,即is—a关系,子类继承父类,表明子类是一种特殊的父类,并且具 ...