写点什么

使用.NET/Mono在移动设备上进行单元测试

2012 年 2 月 21 日

目前具体平台的一个问题是缺乏单元测试的支持。开发者被迫在测试的质量和构建流程之间做出妥协,以便一切能够工作起来。最近 MonoTouch 在这个方面取得了进展,但 Windows Phone 和 Mono for Android 仍然落后。

Windows Phone 7 / Silverlight

Windows Phone 7 的开发者可以通过两个途径进行测试。第一个是修改 Silverlight 单元测试框架,使之能够运行在 Windows Phone 设备上。许多 Silverlight 开发者已经对此熟悉,这个单元测试框架本身还在“试验阶段”,修改需要支持大量测试。Jeff Wilcox 为 Silverlight 3 和 Windows Phone 7.0 的单元测试提供了一个修改。

利处:提供的测试比其他选择更加精确。
弊处:不能包含到构建流程里,没有 IDE 支持。(译注:CodePlex 上有个 Windows Phone Essentials 的开源项目提供了 Visual Studio 测试项目模版,支持通过 NuGet 安装,能和 Jeff Wilcox 修改的单元测试框架一起工作。)

Christofer Löf 采用了完全不同的途径。他不是把一个测试框架放到Windows Phone 里,而是把他要测的代码拿出来。通过 Portable Library Tools 实现他的模型和视图模型,他可以在标准的单元测试框架以及设备上运行相同的代码。不幸的是,Portable Library 并不支持 ObservableCollection,需要使用“ListFactory”提供正确的类型。

利处:可以包含到构建流程里,可以使用任何标准单元测试框架,支持 IDE 整合。
弊处:Portable Library Tools 只提供有限的 API。

第三个途径是使用单独的项目共享相同的源代码。在理想情况下,代码是一样的,但可以通过预处理器指令处理大部分差异。如果你打算在 MonoTouch 和 Mono for Android 上共享相同的代码,这种做法就很有意义了,因为它们需要分开构建。

利处:可以包含到构建流程里,可以使用任何标准单元测试框架,支持 IDE 整合。
弊处:构建时间更长,平台之间的差异可能带来问题。

iOS / MonoTouch

MonoTouch 最近有了一个在设备上执行的单元测试框架。和 Windows Phone 版本的不同,这个是官方支持的。 Touch.Unit 框架本质上只是一个测试执行器,并为 MonoDevelop 提供了基本的 IDE 支持。它的核心是 NUnitLite ,NUnit 框架的一个子集,专门为有限资源的设备量身定做的。

利处:提供的测试比其他选择更加精确。
弊处:不能包含到构建流程里,没有 IDE 支持。

在 Touch.Unit 发布之前,开发者需要使用单独的项目共享相同的源代码,就像 Windows Phone 那样。不过,在这里他们将会使用完整的 Mono 运行时和 NUnit 而不是微软的相关平台和技术。

利处:可以包含到构建流程里,支持 IDE 整合。
弊处:构建时间更长,平台之间的差异可能带来问题。

Android / Mono for Android

目前为 Mono for Android 项目做单元测试的唯一选择是使用多个项目。Mono for Androidhi 阿不够 MonoTouch 成熟,但最终我们应该可以看到一个类似的测试框架。

查看英文原文: Unit Testing on Mobile Devices with .NET/Mono

2012 年 2 月 21 日 18:511047

评论

发布
暂无评论
发现更多内容

第六周学习总结

Griffenliu

免费下载O’Reilly出版社全新之作《建立机器学习流水线》

计算机与AI

学习

《华为数据之道》读书笔记:第 7章 打造“数字孪生”的数据全量感知能力

方志

数据中台 数字化转型

第六周作业

Griffenliu

面试无忧:源码+实践,讲到MySQL调优的底层算法实现

小Q

Java 数据库 学习 面试 算法

现在Php、Java、Python横行霸道的市场,C++程序员们都在干什么呢?

ShenDu_Linux

c++ 程序员 编程语言 C语言 软件工程师

数字货币——货币的第四次革命

CECBC区块链专委会

数字货币

JVM调优不知道怎么回答,阿里总结四大模块,学不会就背过来

小Q

Java 学习 架构 面试 JVM

CPU飙高问题排查

程序猿玄微子

二分发代码模板

小兵

架构师训练营第 1 期 - 第 10 周 - 学习总结

wgl

极客大学架构师训练营

《华为数据之道》读书笔记:第 6 章 面向“自助消费”的数据服务建设

方志

数据中台 数据仓库 数字化转型 数据治理

【薪火计划】06 - 你推崇的领导方式是怎么样的?

brave heart

管理

监控之美——监控系统选型分析及误区探讨

华章IT

运维 云原生 监控 Prometheus

区块链供应链金融落地解决方案,数据上链存储

WX13823153201

区块链供应链金融落地

我是如何使计算提速>150倍的

Lart

Python 代码优化 Numpy

Spock单元测试框架实战指南四 - 异常测试

Java老k

单元测试 spock

区块链开发落地,联盟链系统平台搭建

t13823115967

区块链 区块链开发落地 联盟链系统平台搭建

Spring 源码学习 02:关于 Spring IoC 和 Bean 的概念

程序员小航

spring 源码 源码分析 ioc

顶层设计已基本完备 数字货币将进入加速推进阶段

CECBC区块链专委会

数字货币

Scala语法特性(三):面向对象的独特点

大规模数据处理学习者

特质 样例类 case class Traits

三万字无坑搭建基于Docker+K8S+GitLab/SVN+Jenkins+Harbor持续集成交付环境!!

冰河

Docker 云原生 k8s

区块链如何助力精准扶贫?

CECBC区块链专委会

区块链 扶贫

阿里架构师花近三个月时间整理出来的Java独家面试题(Java岗)

Crud的程序员

Java 编程 架构 java面试

甲方日常 59

句子

工作 随笔杂谈 日常

聊聊销售背后的策略

吴晨曦

创业 销售管理

Nginx的反向代理与负载均衡--配置Nginx

Linux服务器开发

nginx 负载均衡 反向代理 后端开发 Linux服务器

一枚程序猿的MacBook M1详细体验报告

Zhendong

使用 Go 实现 Async/Await 模式

Roc

go golang channel goroutines Async

磁盘到底是怎样工作的?一文理解硬盘结构

Guanngxu

操作系统

区块链政务系统开发解决方案

t13823115967

区块链+ 区块链开发落地 政务系统开发解决方案

使用.NET/Mono在移动设备上进行单元测试-InfoQ