首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如果一个类使用特定的验证类来进行实体验证,那么单元测试是否是一个糟糕的实践呢?

如果一个类使用特定的验证类来进行实体验证,那么单元测试是否是一个糟糕的实践呢?
EN

Stack Overflow用户
提问于 2011-03-21 18:00:06
回答 3查看 579关注 0票数 3

我通过我称之为“命令”的类运行我的所有操作。为了说明这一点,为了创建一个新用户,我将调用以下代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
new CreateUserCommand(unitOfWork).SetName("Username").SetPassword("Blah").Execute();

我现在正在考虑在这个系统中实现验证,以验证一些事情,比如密码有一定的长度,用户名不是数据库中的副本,等等。

为了处理这个问题,我正在考虑使用fluent验证,并为我想要的每种类型的实体验证实体创建一个验证类。例如,我将有一个类,如

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class NewUserValidation : ValidationFor<User>
{
   public NewUserValidation() 
   {
     // Validation Rules here
   }
}

在它自己的类中创建验证的一个优点是,我可以对多个命令使用相同的验证规则(例如,编辑和创建公司可能使用相同的验证规则)。

现在,这些验证类中的每一个都有与它们相关联的单元测试。然而,我正试图弄清楚如何处理使用这些验证类的命令类的单元测试。

例如,在为命令类创建测试时,我是否会为该类的每个验证规则创建单独的测试(因此基本上重复了我计划对每个命令类使用相同验证类的验证类本身的所有单元测试)?这造成了大量的开销,特别是当我已经知道验证类可以工作时,这是因为它们需要单独的单元测试。

我看到的唯一其他选项是在包含验证类的命令中公开一个公共属性,然后单元测试命令的验证类是预期的验证类。但是,这个方法的问题在于,我需要设计一些方法来验证我的Execute()方法是否实际运行了验证类(否则,无法知道是否没有运行验证)。

我仍然倾向于后一种测试方法,这只是为了减少开销,但我确实需要找到一个解决方案来检查验证是否实际运行。这会不会是一个不好的方式去做它,我会更好地选择以前的风格而不是?

编辑:为了回答下面的两个答案,验证将在Execute()方法的内部使用,在Execute()的实现中使用一个validator.Validate(entity)调用。

虽然我不想违反and,但我看不到一种简单的方法来验证Execute() 1)默认使用正确的验证类,而2)实际上调用验证类的.validate(entity)方法。

我可以通过在构造函数中实例化验证类来解决#1,并通过命令类的公共属性公开它,但我不知道如何在不重复单个验证单元测试的情况下正确地对第二个问题进行单元测试。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-21 18:22:46

您已经测试了验证器类的功能。因此,对这些命令类进行测试的唯一方法是,它们实际上使用了验证器。

由于您计划如何使用这些验证器并不明显,因此很难说这是如何做到的。复制每个命令的测试用例是最不有效的方法,但最终,它可能是测试验证器存在的唯一方法。

编辑:从您最近的添加,这看起来是一个完美的候选人使用模拟对象。

要测试Execute方法,可以模拟验证器,并验证它们的validate方法是否被调用。要测试命令结构,可以模拟命令对象,并检查是否将适当的验证器传递给它。

您可能需要查看这个问题 (stackoverflow.com)。不过,您可能需要修改您的设计,以便使用模拟框架。

编辑:还可以看看这个问题 (stackoverflow.com)。它似乎满足了您的需求。微软工具鼹鼠 (microsoft.com)看起来非常有趣。

票数 2
EN

Stack Overflow用户

发布于 2011-03-21 18:23:30

你几乎从来不想违反DRY,所以我认为重复每个引用类的单元测试是绝对错误的。我不太理解您对于验证Execute方法是否运行验证类的关注。这不应该是执行方法的单元测试吗?一旦您测试了它,为什么需要专门针对每种类型的验证类进行测试呢?

最后,我不知道为什么需要“测试命令的验证类是预期的验证类”。听起来像是在测试一个工厂,而不是实际的Command类。

我只测试命令类直接负责的单元测试。如果Command类创建了它引用的自己的验证类,那么我想您可以对它进行单元测试。但根据你提供的信息,这听起来不太对。

票数 1
EN

Stack Overflow用户

发布于 2011-03-22 00:26:04

如果我是您,我将创建,只创建一个validationFalingTest,其中执行一个包含无效数据的命令。

此测试允许命令具有工作验证。在我看来,验证类的正确实例在很大程度上是特定于实现的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5385923

复制
相关文章
智慧动物园基于SkeyeVSS技术的解决方案
金九银十黄金出游季,各地动物园当仁不让成为最火爆的游玩场所之一。当游客们沉迷于与动物们互动之际,动物园动物逃逸、动物打架斗殴、伤人等事件时有发生,给野生动物保护和社会公共安全带来隐患,造成了不良的社会影响。动物园管理者应加大动物园内游客、动物管理,杜绝动物伤人、游客不文明行为的发生。而视开科技推出的SkeyeVSS智慧安防视频监控在为构建智慧城市出力的同时,也为动物园的管控提供了新的思路。
Openskeye
2023/04/17
4910
【笔记】解决win最高管理员权限问题
(小声逼逼:平板装了win10+MacOS10.14+PE维护系统,三个系统都可以触摸+电磁笔操作
zby1101
2021/01/08
1.6K0
一脸懵逼学习Zookeeper(动物园管理员)---》高度可靠的分布式协调服务
1:Zookeeper是一个分布式协调服务;就是为用户的分布式应用程序提供协调服务   A、zookeeper是为别的分布式程序服务的   B、Zookeeper本身就是一个分布式程序(只要有
别先生
2018/01/02
7120
一脸懵逼学习Zookeeper(动物园管理员)---》高度可靠的分布式协调服务
sql导入默认用户解决杰奇cms无法登陆管理员账户问题
前些天下载杰奇cms来体验一下,从a5下载的杰奇1.8版,不是默认的安装程序,上传文件,手工导入sql数据库,修改了config配置文件,很快就完工了。前台可以展现,除了有些乱码显示之外,想要修改相关文件却是加密过的。/admin后台登录界面,用默认账号admin,admin无法登录
ytkah
2022/03/14
6550
sql导入默认用户解决杰奇cms无法登陆管理员账户问题
动物园园长 zookeeper
zookeeper是一个开源的分布式协调服务中间件 zookeeper能做什么? 数据的发布/订阅(配置中心:disconf) 、 负载均衡(dubbo利用了zookeeper机制实现负载均衡) 、 命名服务、 master选举(kafka、hadoop、hbase)、分布式队列、分布式锁 zookeeper的特性: 顺序一致性:从同一个客户端发起的事务请求,最终会严格按照顺序被应用到zookeeper中 原子性:所有的事务请求的处理结果在整个集群中的所有机器上的应用情况是一致的,也就是说,要么整个集群中的
用户2141593
2018/05/18
6440
BZOJ3670: [Noi2014]动物园(KMP)
给出一个字符串,定义$num[i]$表示在$[1, i]$区间内互不重复的相同前后缀的数量。
attack
2018/08/01
2630
BZOJ3670: [Noi2014]动物园(KMP)
谷歌AR“动物园”里有什么?
还记得P君曾在猫咪这种可爱的生物,当然要用AR/VR看才最过瘾!中,介绍过谷歌搜索AR程序中的那只猫吗?没错,就是那只非常软萌可爱的AR猫咪~ 每一根胡须、每一根毛发都栩栩如生,它眨巴着明亮的眼神看着你,谁能不心动呢?
VRPinea
2020/07/09
7840
谷歌AR“动物园”里有什么?
忘记Jenkins管理员密码的解决办法
1.进入\Jenkins\secrets目录,打开initialAdminPassword文件,复制密码;
ydymz
2018/09/10
1.8K0
ZooKeeper集群搭建
Zookeeper集群中只要有过半的节点是正常的情况下,那么整个集群对外就是可用的。正是基于这个特性,要将 ZK 集群的节点数量要为奇数(2n+1),如 3、5、7 个节点)较为合适。
会跳舞的机器人
2018/09/03
1.6K0
MacOS没有管理员账号的解决办法
重启电脑,启动时按住command+s,进入单一用户模式 输入 mount -uw /,然后回车 输入 rm /var/db/.AppleSetupDone ,然后回车 输入 reboot ,然后回车,电脑就会重启了
飞奔去旅行
2019/06/13
2.1K0
P2375 动物园
题目描述 近日,园长发现动物园中好吃懒做的动物越来越多了。例如企鹅,只会卖萌向游客要吃的。为了整治动物园的不良风气,让动物们凭自己的真才实学向游客要吃的,园长决定开设算法班,让动物们学习算法。 某天,园长给动物们讲解KMP算法。 园长:“对于一个字符串S,它的长度为L。我们可以在O(L)的时间内,求出一个名为next的数组。有谁预习了next数组的含义吗?” 熊猫:“对于字符串S的前i个字符构成的子串,既是它的后缀又是它的前缀的字符串中(它本身除外),最长的长度记作next[i]。” 园长:“非常好!那你能
attack
2018/04/13
8320
解决webpack无法通过IP地址访问localhost的问题
只能用http://localhost:8080访问项目,不能用http://本机IP:8080访问
李维亮
2021/07/09
3.4K0
跨域问题导致的FLV直播地址无法播放如何解决?
在EasyNVR、EasyGBS、EasyDSS这一类视频平台中,经常会碰到用户问我们跨域相关的问题。在视频流的传输上,某些项目需要将视频流嵌入第三方平台或者app进行直播,这时极大可能会产生跨域相关的问题,这并不是传输上的问题,而是浏览器自带的机制。
TSINGSEE青犀视频
2021/10/14
5.6K0
跨域问题导致的FLV直播地址无法播放如何解决?
BZOJ 3670: [Noi2014]动物园【KMP变形 】
3670: [Noi2014]动物园 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 2738  Solved: 1475 [Submit][Status][Discuss] Description 近日,园长发现动物园中好吃懒做的动物越来越多了。例如企鹅,只会卖萌向游客要吃的。为了整治动物园的不良风气,让动物们凭自己的真才实学向游客要吃的,园长决定开设算法班,让动物们学习算法。 某天,园长给动物们讲解KMP算法。 园长:“对于一个字符串S,它的长度为L。
Angel_Kitty
2018/04/09
9420
动物园(虚函数与多态)
某个动物园内,有老虎、狗、鸭子和猪等动物,动物园的管理员为每个动物都起了一个名字,并且每个动物都有年龄、体重等信息。每到喂食的时候,不同的动物都会叫唤(speak)。每种动物的叫唤声均不同,老虎的叫唤声是“AOOO”,狗的叫唤声是“WangWang”,鸭子的叫唤声是“GAGA”,猪的叫唤声是“HENGHENG”。
叶茂林
2023/07/30
1690
Microsoft 本地管理员密码解决方案 (LAPS)
问题 企业环境中计算机上本地帐户的真正问题是“本地”一词用词不当。如果网络上的 50 台计算机的本地管理员帐户为“Administrator”,密码为“P@55w0rd1!”,首先这是一个可怕的密码。其次,更重要的是,如果其中一台计算机受到威胁,它们都将受到威胁。Windows 非常有帮助。非常有用,如果您将本地管理员凭据传递给具有相同本地凭据的另一台计算机,则授予访问权限,就像您使用目标系统凭据登录一样。将管理员凭据转储到一个以获取所有管理员!缓解此问题的最佳方法是确保每台计算机都有一个不同的本地管理员帐户密码,该密码长、复杂且随机,并且会定期更改。
Khan安全团队
2022/01/24
4K0
Hadoop学习笔记—14.ZooKeeper环境搭建
从字面上来看,ZooKeeper表示动物园管理员,这是一个十分奇妙的名字,我们又想起了Hadoop生态系统中,许多项目的Logo都采用了动物,比如Hadoop采用了大象的形象,所以我们可以猜测ZooKeeper就是对这些动物进行一些管理工作的。
Edison Zhou
2018/08/20
3070
Hadoop学习笔记—14.ZooKeeper环境搭建
动物园IP网络广播-基于IP局域网络的动物园背景音乐广播系统
某动物园为中国陆地七大动物园之一,是国家建设部命名的全国“十佳”动物园,坐落于风景秀丽的水上公园南端,园内树木葱郁,碧草连茵,风光旖旎。全园占地54公顷,现有各类动物200余种,3000余只,其中国家一级保护动物大熊猫、东北虎、金丝猴、亚洲象、扭角羚、丹顶鹤等堪为稀世珍宝,国家二级保护动物小熊猫、大天鹅、猞猁等亦为世所罕见,更有来自别国异域的珍稀动物美洲虎、非洲狮、长颈鹿、犀牛、河马、北极熊、黑猩猩和金刚鹦鹉等,令游客一园览尽天下奇珍异兽。
北京海特伟业
2022/08/31
5220
动物园IP网络广播-基于IP局域网络的动物园背景音乐广播系统
分布式进阶__动物园园长 zookeeper
数据的发布/订阅(配置中心:disconf) 、 负载均衡(dubbo利用了zookeeper机制实现负载均衡) 、
矿泉水
2018/05/11
6921
分布式进阶__动物园园长 zookeeper
点击加载更多

相似问题

将字符串转换为数学公式

31

将R公式格式转换为数学公式

12

将数学公式转换为javascript

42

将数学公式转换为算法

21

将数学公式转换为JavaScript

120
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文