自动化测试很重要!很重要!以前多是手动测试,没有写过测试用例。这样的结果就是发现bug改了之后关联的其他功能又要从新测一遍。这样既浪费时间与成本,而且很无聊。之所以选择NUnit是公司需要,现在.net 系都流行xunit,有空再看看它吧。Nunit的xamarin应用有很多欠缺的地方,特为大伙补补坑。Nunit本身的Test,SetUp,Category等属性的使用下次再说。

NUnit简介

... an excellent example of idiomatic design. Most folks who port xUnit just transliterate the Smalltalk or Java version. That's what we did with NUnit at first, too. This new version is NUnit as it would have been done had it been done in C# to begin with.

NUnit是一个单体测试框架,支持.net系所有语言,它的祖先是Java的JUnit。目前最新为3.6版本,已经重写了很多特性,目前支持.net core,xamarin,uwp等很多.net 平台。

Xamarin应用

Xamarin项目测试分类:

  • 平台无关部分(业务逻辑等):创建Nunit测试类库添加参照就可以了,不用启动实机或者模拟器测试。(本文略过,会第二种这种肯定也会)

  • 平台相关部分(文件操作,数据库操作等):如果多个平台的测试用例一样,可以创建共享项目(Share Project)放测试用例,需要启动实机或模拟器测试。(重点介绍)

添加Nunit测试项目的方法有两种:

  1. 通过Nunit的模板创建测试项目。
  2. 创建相应的项目然后再添加Nunit相关的Nuget包(Nunit与Nunit.Xamarin)。

第一种方法简单但是问题特多,所以特拿它来做说明。第二种参照第一种基本上可以自行搞定略过。

1,安装NUnit Templates for Visual Studio模板

模板默认安装如下内容:

Project Templates

Template Platform Language
NUnit 3 Unit Test Project Desktop C#
NUnit 3 Unit Test Project Desktop Visual Basic
NUnit 3 Unit Test Project Xamarin Android1 C#
NUnit 3 Unit Test Project Xamarin iOS1 C#
NUnit 3 Unit Test Project Xamarin UWP1,2 C#
NUnit 3 Unit Test Project Xamarin WP8.11 C#

Item Templates

Template Language Description
NUnit Test Fixture C# An NUnit unit test class
NUnit Test Fixture Visual Basic An NUnit unit test class
NUnit SetUp Fixture C# Code that runs before and after all the tests in the assembly
NUnit SetUp Fixture Visual Basic Code that runs before and after all the tests in the assembly

Code Snippets

Snippet Shortcut Language
Test Fixture ntestfixture C#
Test Method ntest C#
Test Case ntestcase C#

下载地址:https://marketplace.visualstudio.com/items?itemName=NUnitDevelopers.NUnitTemplatesforVisualStudio

或者

通过Visual Studio的扩展更新添加【NUnit Templates for Visual Studio

安装成功后在Cross-Platform分类下面就会有Test的模板了:

2,新建iOS测试项目

成功后的项目如下:

以上圈起来的为问题点:(第一个坑)

  • 【AppDelegate.cs.txt】是多余的可以删除。(如果手动添加Nunit.xamarin包也会生成此项,这个时候需要用它替换原来的AppDelegate.cs文件)
  • 【Resources】文件夹下的文件是损坏的无效文件,需要自行替换。

不信的可以先编译试试,绝对会出现如下错误:

替换文件后再编译肯定可以成功:

由于默认自带了一个测试用例所以可以启动看看效果:

  • Run Tests:再次启动测试
  • All Results:查看全部测试结果
  • Failed Results:查看失败的测试结果

效果看上去还是很不错的!

AppDelegate.cs里头包含Nunit测试引擎的启动设置,以及外部测试程序集的设置。如果是Share project参照的话这里就不用修改,这也是为什么推荐使用Share project的原因。

public override bool FinishedLaunching(UIApplication app, NSDictionary options)
{
global::Xamarin.Forms.Forms.Init(); // This will load all tests within the current project
var nunit = new NUnit.Runner.App(); // If you want to add tests in another assembly
//nunit.AddTestAssembly(typeof(MyTests).Assembly); // Do you want to automatically run tests when the app starts?
nunit.AutoRun = true; LoadApplication(nunit); return base.FinishedLaunching(app, options);
}

自动带的测试用例,Nunit具体的这些属性以及方法如何使用可以参照官网,有空我再补补吧。

[TestFixture]
[Category(nameof(TestClass))]
public class TestClass
{
[Test]
public void TestMethod()
{
// TODO: Add your test code here
Assert.Pass("Your first passing test");
}
}

3,新建Android测试项目

生成成功后的效果:(公司的电脑每次都无法创建成功,多半是Android SDK与Xamarin版本的问题。)

以上圈起来的为问题点:(第二个坑)

  • 【MainActivity.cs.txt】是多余的可以删除。(如果手动添加Nunit.xamarin包也会生成此项,这个时候需要用它替换原来的MainActivity.cs文件)
  • 【Resources】文件夹下的icon.png文件是损坏的无效文件,需要自行替换。

直接编译的话应该会有如下等错误:(由于编译器默认使用了最新版的Android SDK)

解决办法:安装最新版的xamarin.Forms.

记得替换Resources下面所有文件夹里面的icon.png,不然会有如下错误:

替换之后编译就没问题了:

启动之后的效果和iOS类似如下:

MainActivity.cs里头包含Nunit测试引擎的启动设置,以及外部测试程序集的设置。如果是Share project参照的话这里就不用修改,这也是为什么推荐使用Share project的原因。

protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState); global::Xamarin.Forms.Forms.Init(this, savedInstanceState); // This will load all tests within the current project
var nunit = new NUnit.Runner.App(); // If you want to add tests in another assembly
//nunit.AddTestAssembly(typeof(MyTests).Assembly); // Do you want to automatically run tests when the app starts?
nunit.AutoRun = true; LoadApplication(nunit);
}

由于我已经把测试用例放到了Share Project,代码和上面iOS的一样。

4,新建UWP测试项目

设置版本

然后就出错了:(如果你的电脑安装了10240的SDK的话没问题)

第三坑:明明最低选择了10586,怎么还必须的有10240的版本?实际上确又创建了此项目:

无法添加到工程的罪魂祸首在这,这VS模板不知道是那位大哥建的啊!怎么就固定死了10240???

解决办法也就有了,把替换成你想要的版本就可以了:

添加到工程后的情况:

以上圈起来的为问题点:(第四个坑)

  • 【Project.json】居然没有Xamarin.Forms,Nunit,Nunit.Xamarin包的设置。
  • 【Assets】文件夹下的文件是损坏的无效文件,需要自行替换。

解决办法:

先替换图片

接着添加以下包:

编译应该就没问题了:

添加共享项目参照,启动试试效果:

MainPage.cs里头包含Nunit测试引擎的启动设置,以及外部测试程序集的设置。如果是Share project参照的话这里就不用修改,这也是为什么推荐使用Share project的原因。

public sealed partial class MainPage
{
public MainPage()
{
InitializeComponent(); // Windows Universal will not load all tests within the current project,
// you must do it explicitly below
var nunit = new NUnit.Runner.App(); // If you want to add tests in another assembly, add a reference and
// duplicate the following line with a type from the referenced assembly
nunit.AddTestAssembly(typeof(MainPage).GetTypeInfo().Assembly); // Do you want to automatically run tests when the app starts?
nunit.AutoRun = true; LoadApplication(nunit);
}
}

5,新建Nunit测试类库

在【测试】分类里面可以找到如下模板:

为了能在测试资源管理器里面看到测试条目,添加【NUnit3TestAdapter】Nuget包:

编译测试项目之后测试资源管理器就会有条目:

点击全部运行就可以跑相关测试:

最后整体的测试代码结构如下:

代码地址:https://github.com/NewBLife/XamarinDemo/tree/master/Demo.Tests

总结

测试框架本身还是不错的,测试速度与测试结果展示等方面都还不错。至于它的xamarin模板确实太不靠谱,建议直接创建普通的项目然后添加Nunit相关包与相应的代码,这样也许问题还会少些。希望已经帮你们填完坑了。

Xamarin+Prism开发详解八:自动化测试之NUnit实践的更多相关文章

  1. Xamarin+Prism开发详解七:Plugin开发与打包测试

    有了上章[Xamarin+Prism开发详解六:DependencyService与IPlatformInitializer的关系]的基础,现在来理解Plugin开发就简单了. 本文实例代码地址:ht ...

  2. Xamarin+Prism开发详解四:简单Mac OS 虚拟机安装方法与Visual Studio for Mac 初体验

    Mac OS 虚拟机安装方法 最近把自己的电脑升级了一下SSD固态硬盘,总算是有容量安装Mac 虚拟机了!经过心碎的安装探索,尝试了国内外的各种安装方法,最后在youtube上找到了一个好方法. 简单 ...

  3. Xamarin+Prism开发详解一:PCL跨平台类库与Profile的关系

    在[Xamarin+Prism小试牛刀:定制跨平台Outlook邮箱应用]中提到过以下错误,不知道大伙还记得不: 无法安装程序包"Microsoft.Identity.Client 1.0. ...

  4. Xamarin+Prism开发详解三:Visual studio 2017 RC初体验

    Visual studio 2017 RC出来一段时间了,最近有时间就想安装试试,随带分享一下安装使用体验. 1,卸载visual studio 2015 虽然可以同时安装visual studio ...

  5. Xamarin+Prism开发详解六:DependencyService与IPlatformInitializer的关系

    祝各位2017年事业辉煌!开年第一篇博客,继续探索Xamarin.Forms… 为什么我做Xamarin开发的时候中意于Prism.Forms框架?本章为你揭晓. 实例代码地址:https://git ...

  6. Xamarin+Prism开发详解五:页面布局基础知识

    说实在的研究Xamarin到现在,自己就没设计出一款好的UI,基本都在研究后台逻辑之类的!作为Xamarin爱好者,一些简单的页面布局知识还是必备的. 布局常见标签: StackLayout Abso ...

  7. Xamarin+Prism开发详解二:Xaml文件如何简单绑定Resources资源文件内容

    我们知道在UWP里面有Resources文件xxx.resx,在Android里面有String.Xml文件等.那跨平台如何统一这些类别不一的资源文件以及Xaml设计文件如何绑定这些资源?应用支持多国 ...

  8. 在【Xamarin+Prism开发详解三:Visual studio 2017 RC初体验】中分享了Visual studio 2017RC的大致情况,同时也发现大家对新的Visual Studio很是感兴趣。于是发时间深入研究了一下Visual Studio 2017RC 是不是和微软Connect()://2016上说得一样神。

    总共列出了12点,耐心点慢慢看! 1,添加了不少[代码样式]的设置项目. 通过合理的设置每个人都能写出优美的代码,而且团队项目也可以达到统一代码风格. this首选项:可以设置[字段,属性,方法,事件 ...

  9. EasyPR--开发详解(6)SVM开发详解

    在前面的几篇文章中,我们介绍了EasyPR中车牌定位模块的相关内容.本文开始分析车牌定位模块后续步骤的车牌判断模块.车牌判断模块是EasyPR中的基于机器学习模型的一个模块,这个模型就是作者前文中从机 ...

随机推荐

  1. STM32的USART DMA传输(转)

    源:STM32的USART DMA传输 问题描述: 我有一个需求,AD采得一定数目的数据之后,由串口DMA发出,由于AD使用双缓冲,所以每次开始DMA的时候都需要重新设置开始的内存地址以及传输的数目( ...

  2. iOS开发——缩放图片

    捏合图片,在原imageView中放大缩小图片. 懒得多说,直接上代码: // //  ViewController.m //  Demo-hehehe // //  Created by yyt o ...

  3. iOS通过代码关闭程序

    //-------------------------------- 退出程序 -----------------------------------------// - (void)exitAppl ...

  4. JRPC 轻量级RPC框架

    JRPC是一个轻量级的java RPC框架.它支持服务注册和发现. 目前它开源了,地址为:https://github.com/dinstone/jrpc. Quick Start step 1: g ...

  5. jquery弹窗插件

    .zhuti { position:absolute; z-index:; font-size:14px; border-radius:5px; box-shadow: 5px white; over ...

  6. JQuery中根据表单元素动态拼接json 字符串

    // <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.o ...

  7. IOS9中联系人对象的使用及增删改查操作的函数封装

    之前克服重重困难把IOS9中新的类联系人搞明白了,现在把增删改查封装成了函数,如下: // // ViewController.m // IOS9中联系人CNContact的使用 // // Crea ...

  8. Python 线程池的实现

    import urllib2 import time import socket from datetime import datetime from thread_pool import * def ...

  9. eclipse修改主题配色

    1.Java-->Editor---> Syntax Coloring修改类中的各种代码颜色 2.General-->Editors --->Text Editors

  10. ios自定义UIButton内部空间Rect