- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是行为驱动开发的新手,我正在努力学习它。我使用 MSpec & Watin 进行验收测试,使用 MSpec 进行 ASP.Net MVC 4 的单元测试。我有一个简单的用户注册场景。
When a user enters username, password, email, etc. and clicks on register button
It should validate email address
It should check that the username already does not exist
It should register the user
It should send a welcome email
It should redirect to the home page
最佳答案
先从验收测试开始 插入您的发展 (外内)。
您需要编写以下场景:
用户尝试使用无效电子邮件注册
这是一个很容易的
用户尝试使用已经存在的登录名进行注册
为此,您需要能够将您的应用程序插入 在内存存储库中 (我建议使用 IoC 容器 来轻松配置您的应用程序)。这样,您首先使用您的应用程序注册“Bob”用户,然后查看当您尝试使用该登录名再次注册时会发生什么。所以基本上解决方案是使用 存储库模式 ,并且有一个内存实现而不是你真正的数据库实现。
我在这里假设您的数据库不包含任何业务逻辑,否则使用真实数据库会更安全,以便您可以在数据库中执行业务规则。这在遗留系统中很常见。
内存存储库的优势在于您的测试将运行得更快,并且您无需编写复杂的拆卸代码。对于真正的数据库,您需要确保在每次测试之间清理数据库以确保测试独立性,并且使用数据库运行测试要慢得多。
用户注册成功
对于这个,您需要检查重定向,这很容易。对于电子邮件部分,agian,您需要使用 将您的应用程序插入 stub 。适配器模式 .您可以像 一样实现 stub 。在内存队列中 ,这样您就可以断言您的应用程序是否正确发送了电子邮件。
关于单元测试
如果您打算自己编写电子邮件语法验证,我建议您自己对该部分进行单元测试。
正如奥古斯托所说,Growing Object-Oriented Software, Guided by Tests是学习 ATDD 和 TDD 的好书。
一般策略是始终从高级验收测试开始,以插入您的开发。模拟无法在内存中运行的外部服务或无法在本地安装或不易测试的服务。在有意义的情况下使用 TDD 进行单元测试。
关于unit-testing - 如何将 "full stack"功能分解为验收、集成和单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14099970/
我正在尝试在 R 中计算任意 N x J 矩阵 S 的投影矩阵 P: P = S (S'S) ^ -1 S' 我一直在尝试使用以下函数来执行此操作: P 概述 solve 基于一般方阵的 LU 分解
所以我有一个包含数千行的非常旧的文件(我猜是手工生成的),我正试图将它们移动到一个 rdb 中,但是这些行没有转换为列的格式/模式。例如,文件中的行如下所示: blah blahsdfas
这实际上只是一个“最佳实践”问题...... 我发现在开发应用程序时,我经常会得到很多 View 。 将这些 View 分解为几个 View 文件是常见的做法吗?换句话说......而不只是有view
使用以下函数foo()作为简单示例,如果可能的话,我想将...中给出的值分配给两个不同的函数。 foo args(mapply) function (FUN, ..., MoreArgs = NUL
正面案例:可以进入列表 groovy> println GroovySystem.version groovy> final data1 = [[99,2] , [100,4]] groovy> d
省略素数计算方法和因式分解方法的详细信息。 为什么要进行因式分解? 它的应用是什么? 最佳答案 哇,这个线程里有这么多争斗。 具有讽刺意味的是,这个问题有一个主要的有效答案。 因式分解实际上在加密/解
术语“分解不良”和“重构”程序是什么意思?你能举一个简单的例子来理解基本的区别吗? 最佳答案 重构是一种通用技术,可以指代许多任务。它通常意味着清理代码、去除冗余、提高代码质量和可读性。 分解不良代码
我以前有,here ,表明 C++ 函数不容易在汇编中表示。现在我有兴趣以一种或另一种方式阅读它们,因为 Callgrind 是 Valgrind 的一部分,在组装时显示它们已损坏。 所以我想要么破坏
最初,我一直在打开并同时阅读两个文件,内容如下: with open(file1, 'r') as R1: with open(file2, 'r') as R2: ### m
我正在尝试摆脱 标签和标签内的内容使用 beatifulsoup。我去看了文档,似乎是一个非常简单的调用函数。有关该功能的更多信息是 here .这是我到目前为止解析的 html 页面的内容...
给定一个 float ,我想将它分成几个部分的总和,每个部分都有给定的位数。例如,给定 3.1415926535 并要求将其分成以 10 为基数的部分,每部分 4 位数字,它将返回 3.141 + 5
我的 JSF 项目被部署为一个 EAR 文件。它还包括一些 war 文件。我需要 EAR 的分解版本(包括分解的内部 WAR)。 有什么工具可以做到吗? 最佳答案 以编程方式还是手动? EAR 和 W
以下函数不使用行透视进行 LU 分解。 R 中是否有一个现有的函数可以使用行数据进行 LU 分解? > require(Matrix) > expand(lu(matrix(rnorm(16),4,4
关闭。这个问题是opinion-based .它目前不接受答案。 想改进这个问题?更新问题,以便 editing this post 提供事实和引用来回答它. 7年前关闭。 Improve this
我正在使用登记数据进行病假研究。从登记册上,我只得到了每个人的病假开始日期和结束日期。但日期并没有逐年分割。例如,对于人 A,只有开始日期 (1-may-2016) 和结束日期 (14-feb-201
我发现以下 R 代码使用 qr 因式分解无法恢复原始矩阵。我不明白为什么。 a <- matrix(runif(180),ncol=6) a[,c(2,4)] <- 0 b <- qr(a) d <-
我正在尝试检测气候数据时间序列中的异常值,其中一些缺失的观测值。在网上搜索我发现了许多可用的方法。其中,STL 分解似乎很有吸引力,因为它去除了趋势和季节性成分并研究了其余部分。阅读 STL: A S
我想使用 javascript 分解数组中的 VIN,可能使用正则表达式,然后使用某种循环... 以下是读取 VIN 的方法: http://forum.cardekho.com/topic/600-
我正在研究 Databricks 示例。数据框的架构如下所示: > parquetDF.printSchema root |-- department: struct (nullable = true
我正在尝试简化我的代码并将其分解为多个文件。例如,我设法做到了: socket.once("disconnect", disconnectSocket); 然后有一个名为 disconnectSock
我是一名优秀的程序员,十分优秀!