- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
因此 - 管理层希望插入在所有向前发展的应用程序中进行单元测试 - 并最终进入完整的 TDD/持续集成/自动构建模式(我希望)。然而,在这一点上,我们只关心让每个人都使用单元测试来开发应用程序。我想从基础开始。
我不会撒谎 - 我在单元测试方面无论如何都不是专家,但我确实有足够的理解来从基础开始主动,并让我们作为一个团队一起成长。我真的很想得到你们所有专家对我对这件事的攻击计划的一些评论和批评。这是一个由大约 10 名开发人员组成的小商店团队,这为推进敏捷开发方法和最佳实践提供了绝佳机会。
首先 - 该团队主要由中级开发人员和几个初级开发人员和一个高级开发人员组成,他们几乎没有接触过单元测试。培训将是每半月一次的 session ,每次大约 30-60 分钟(我猜可能会持续一个小时,而且可能更频繁)。我们将继续这些 session ,直到有必要阻止它们以让其他人 catch 他们自己的“家庭作业”和经验——但插入力将永远持续下去。
无论如何 - 这是我想出的类(class)计划。好吧,至少前两个。您的专家在类(class)的实际内容或结构等方面的任何建议都会很棒。评论和批评非常感谢。非常感谢。
如果这“太多”无法在此处发布或通读,我深表歉意。我认为这对于希望首先进行单元测试的 SO 用户来说将是一个很好的主题。也许你可以直接跳到“类(class)计划”部分——再次感谢大家。
CLIFF NOTES - 我意识到这篇文章又长又丑,所以这里是悬崖笔记 - 第 1 课将是“ Hello World 单元测试” - 第 2 课将打开我最近的应用程序的解决方案,并展示如何在现实生活中应用每个“ Hello World ”的例子......非常感谢大家到目前为止给我的反馈......只是想强调这样一个事实,即第 2 课将在其中进行现实生活中的生产单元测试,因为很多人建议我从一开始就计划这样做 =)
单元测试类(class)计划
概述
为什么要进行单元测试?看起来像是一堆额外的工作——那为什么要这样做呢?
• 成为自己命运的主人。我们的大多数用户并没有进行真正的 UAT,不幸的是,他们倾向于在生产中进行一次测试。通过单元测试,我们大大降低了与此相关的风险,尤其是当我们创建足够的测试数据并尽可能多地考虑顶级输入时。虽然不是防止所有错误的“银弹” - 它是您的第一道防线 - 一个巨大的前线,可与 SB 冠军巨人队相媲美。
• 单元测试强制执行良好的设计和架构实践。可以这么说,是“维护您的代码并知道您住在哪里的暴力精神病患者”。您根本无法编写经过良好单元测试的低质量代码
• 你有多少次没有因为太害怕破坏某些东西而没有重构臭代码?自动化测试消除了这种恐惧,使重构更容易,从而使代码更具可读性和更易于维护。
• 底线——维护变得更加容易和便宜。现在花在编写单元测试上的时间可能很昂贵——但它为您节省的时间已经一次又一次地被证明是更有值(value)的。这是自动测试代码的第一大原因。它给了我们信心,使我们能够对系统进行更雄心勃勃的更改,否则我们可能不得不减少对系统的要求,甚至可能根本不会进行这些更改。
术语回顾
• 单元测试 - 测试最低级别的单个工作单元。例如。 – 测试单个函数可以流经的所有可能的代码路径。
• 集成测试 - 测试您的单元如何协同工作。例如。 – 运行一个“作业”(或一系列函数调用),用已知的输入完成一系列工作——然后在最后查询数据库并断言这些值是你对这些已知输入的期望(而不是必须注意- 在网页上的某个地方放置一个网格,例如进行功能测试)。
• 假货——假货是一种用于测试的对象。它让您很容易不测试不想测试的代码。您不必调用您不想要的代码(如数据库调用),而是使用虚假对象来“伪造”该数据库调用,并可能从 XML/Excel 文件或模拟框架中读取数据。
o Mock – 一种您对其进行断言声明的假货。
o Stub – 一种用作占位符代码的伪代码,因此您可以跳过数据库调用,但不要对它进行断言
类(class)
第一课 – Hello Worlds
• Hello World 单元测试 - 我将创建一个经过单元测试的“hello world”控制台应用程序。将在 session 期间即时创建此应用程序,展示 Visual Studio 2008 中的工具(测试项目、测试工具工具栏等),我们将在此过程中使用这些工具,同时解释它们的作用。这将只有一个单元测试。 (好吧,也许我不会“即时”创建它=),必须多考虑一下)。还将解释 Assert 类及其用途以及单元测试的一般流程。
• Hello World,稍微复杂一点。现在我们的函数有不同的路径/逻辑分支,代码可以流过。我们将对此功能进行约 3 个单元测试。这将是我在 session 之前预先编写的解决方案。
• Hello World,依赖注入(inject)。 (不使用任何 DI 框架)。一个预先编写的解决方案,它建立在前一个的基础上,这次使用依赖注入(inject)。将解释什么是 DI 并展示其工作原理的示例。
• Hello World,模拟对象。一个预先编写的解决方案,它建立在前一个的基础上,这次使用我们新添加的 DI 代码将一个模拟对象注入(inject)我们的类,以展示模拟是如何工作的。将使用 NMock2.0,因为这是我唯一接触过的。非常简单的示例,仅显示模拟对象的使用。 (也许把这个放在单独的课上?)。
• Hello World,(非自动化)集成测试。在之前的解决方案的基础上,我们创建了一个集成测试,以展示如何一起测试 2 个函数,或一起测试整个类(也许将这个放在单独的类(class)中?)
第二课——现在我们知道了基础知识——如何在现实生活中应用它?
• 最佳实践概述
o 规则#1 - 单一责任主体。单一责任主体。单一责任主体。开玩笑地说这是编写代码时要记住的最重要的事情。一个类应该只有一个目的;一个函数应该只做一件事。这里的关键词是“单元”测试——SRP 会将您的类和函数封装到单元中。
o 依赖注入(inject)是你的第二好 friend 。 DI 允许您在运行时将行为“插入”到您拥有的类中。除此之外,这就是我们如何使用模拟框架使我们的更大的类更容易测试。
o 在编写代码时总是想着“我将如何测试它”。如果看起来“太难测试了”,那很可能是你的代码太复杂了。重构直到它成为类/函数的更多逻辑单元 - 将一个做 5 件事的类变成 5 个类,一个调用其他 4 个。现在你的代码将更容易测试 - 也更容易阅读和重构也是如此。
o 测试行为,而不是实现。简而言之,这意味着我们在大多数情况下只能测试我们类上的 Public 函数。我们不关心测试私有(private)的(实现),因为公共(public)的(行为)是我们调用代码使用的。例如......我是一位百万富翁的软件开发人员,去阿斯顿马丁经销商处为自己买了一个全新的 DB9。销售人员告诉我它可以在 3 秒内完成 0-60。你会如何测试这个?您会抬起发动机并进行诊断测试等吗?不......你会把它带到公园大道上并以每小时 160 英里的速度行驶 =)。这是测试行为与实现。
• 审查现实生活中经过单元测试的应用程序。在这里,我们将详细介绍上述每个“hello world”示例——但以我最近的项目为例,现实生活中的版本。我将打开一个简单的单元测试,一个更复杂的单元测试,一个使用 DI,一个使用 Mocks(可能耦合到 DI 测试)。这个项目相当小而简单,所以它真的很合适。这还将包括测试 DAL 以及如何设置测试数据库来运行这些测试。
最佳答案
我在公司内部帮助设计和运行了面向 Java 开发人员的测试驱动开发培训。我们最终将其作为一整天的培训进行,我们将其分解为类似于您在这里的方式。
关于unit-testing - 所以..我需要对团队进行单元测试培训 - 可以在类(class)计划中使用 C&C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1891466/
$ flutter ios build --release 它显示多个可用的有效开发证书(您的选择将被保存): 但是它没有显示分发证书选择,不过我使用了--release标志,,, 我检查过我已经在本
我有一个 Jenkins Bitbucket 团队/项目工作。 在我的存储库中的 Jenkinsfile 中,我使用“git describe”来获取当前标签。 在我更新到最新的 Jenkins 版本
您会在新的 .NET 开发团队中实现哪些最佳实践和方法? 干杯 最佳答案 仅使用 Visual Studio 如果您需要数据库,请使用服务器(尽早减少 SQL 问题) 使用版本控制 关于c# - .N
我有 3 个表用户、团队、组。每个团队可以有多个组。每个组中都有一个或多个用户。用户可以属于多个组。您认为对所有用户使用组会更好吗(这样每个团队至少有一个名为所有用户的组)还是引入另一个表 team_
问题: 让我们考虑以下场景: 让T={t_1, t_2, ..., t_h}成为一组不同的游戏。每场比赛都是一对一的(它们是单人游戏)。 设n为players的个数,每个游戏都有一个已知的性能度量这个
我们有 5 个人在从事同一个项目,并且在 Bitbucket 中有多个 GIT 存储库。每个用户都有自己的 Bitbucket 帐户。我正在寻找拥有某种团队或组织功能的最佳实践方法,以便我们都可以在相
我们在实现 Team Foundation Build Server 时遇到了性能问题,而且我对如何加快速度没有任何想法。我们已经添加了一些 PropertyGroup 元素来提高几个步骤(SkipC
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 8年前关闭。 Improve this qu
我为我是所有者的团队 channel 设置了 Azure DevOps 连接器。它一直工作正常,但现在我需要调整一些设置,因为我不希望它宣布取消部署。因此,我打开连接器、已配置、AzureDevops
我们有一个团队机器人,可以在 MS 团队中发布消息。新对话的第一个事件总是一张自适应卡片,我们偶尔会用一张新卡片更新它。这一切正常,直到我用这个机器人组建了一个新团队。 我们正在尝试使用 Update
What do I need to install to activate this button Share Project in Eclipse?I need to transfer the pr
我创建了一个解决方案,其中包含我的所有项目,包括 Dotfuscator 项目和设置项目。 某些 Dotfuscator 项目仅对某些程序集进行了模糊处理,而不会影响它们的任何引用。 从 Visual
如何观察Variable来自一组团队 ( Variable ),以便每次 Game出现( Variable 由于游戏数组被修改而改变),数组 Team是否应该进行相应更新,例如比赛两支球队的得分、胜利
我的问题是我所有的应用程序 ID 都相同。我认为它们应该是不同的以识别它们。即使我尝试创建新的配置文件,它也不给我更改 ID 或生成新配置文件的选项。我正在尝试为我的一个应用程序设置 ICloud,我
熬夜工作到上午 1030 点并完成作业后,我决定在格式化并提交作业之前小睡一会儿。不用说,午睡变成了 5 小时的 sleep 时间。 醒来后,我将代码格式化为 java 的 eclipse googl
我是 3 个注册 iOS 开发团队的成员: 我的个人 iOS 开发者帐户。 我的企业 iOS 开发者客户团队。 我客户的 iOS 开发者客户团队。 我现在想使用 iOS Provisioning Po
目标:MS Teams 在双显示器上的可访问性行为,显示器设置为不同的比例,例如 100% 和 125%,分辨率为 1920*1080。我使用的工具是 Accessibility Insight。 问
最近注意到在 MS CRM 2011 中无法从工作流步骤创建/更新业务部门或团队。 为什么要制作它,是否有任何解决方法? 最佳答案 遗憾的是这是设计使然。您需要创建自定义工作流事件来创建/更新业务部门
你们这里有些奇怪。 我们有一个相当复杂的解决方案(在asp.net,silverlight,WFC,Ria Services等中分布了111个项目)解决方案,该解决方案可以在我的开发盒中正确构建(20
我们的技术总监希望测试运行后,能够在 Microsoft 团队 channel 中更新当前 testng 报告中的测试结果。 我们目前正在使用 testng 报告来分析测试运行后的报告。 我们可以将
我是一名优秀的程序员,十分优秀!