首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在测试类中验证方法类

如何在测试类中验证方法类
EN

Stack Overflow用户
提问于 2014-05-13 04:11:07
回答 2查看 84关注 0票数 1

我有一个存储库,它有一个名为ConvertToBusinessEntity的方法,它将数据从数据源转换为业务对象。该方法可供存储库中的其他方法使用,如Get、GetAll等。

该方法经过单元测试。我检查数据是否从数据源中正确检索,以及是否将值放入实体正确的属性中。

但是现在我需要测试和创建GetEntity方法,该方法应该调用ConvertToBusinessEntity。测试了ConvertToBusiness背后的逻辑。我只需要知道如何验证被测试类中的方法是否被调用(而不是依赖项)。

有谁知道如何做到这一点或任何替代方法吗?

我想到了另一种方法,但我不确定这是不是最好的方法。我可以扩展被测试的类,并在每次调用该方法时增加一个计数器。

另一种方法是嘲笑类本身。

你认为如何?还有其他建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-13 04:24:54

在存储库中使用ConvertToBusinessEntity并不是很好的主意。存储库的职责是使用数据存储(CRUD)。数据类型的映射是某些映射类的责任。否则,存储库有太多的责任。看看你要测试的是什么:

我检查数据是否从数据源中正确检索,这些值被放入实体正确的属性中。

你看到这个了吗?你的考试可能会因为两个完全不同的原因而失败。另外,您应该根据两个完全不同的原因更改存储库。这里的最佳方法是直接持久化业务实体。现代ORMs允许这样做,而不会污染具有属性的业务实体,或者强制它继承某些特定的数据访问类。

如果您真的希望存储库中有数据映射逻辑,那么将其设置为私有(实际上,只有存储库应该要求将业务实体转换为某些数据访问对象),并且不关心如何实现该逻辑。让它成为内部类实现的一部分。您应该只关心存储库能够接受或返回已填充的业务实体--这是存储库的责任。在存储库中如何实现映射并不重要。您应该测试存储库是做什么的,而不是如何。因此,只需检查存储库是否返回了预期的业务对象。

票数 3
EN

Stack Overflow用户

发布于 2014-05-13 04:47:47

我只需要知道如何验证被测试类中的方法是否被调用(而不是依赖项)。

但是,你真的需要这样做吗?如果您的GetEntity方法操作正确,您真的关心它是如何操作的吗?您真的关心它是通过委托给ConvertToBusiness还是通过其他方式来执行其功能的呢?

我建议你

  1. 把每一种方法都看作是有一个规范。
  2. 该规范描述了它必须进行的输出和公开可见的操作。这并不描述方法是如何执行其功能的;这是一个可能发生变化的实现细节。
  3. 单元测试只检查您的方法是否符合它们的规范。
  4. 不过,您可以使用有关实现的知识来选择好的测试用例。

但是,您可以声明,如果我这样做,我不是单元测试我的方法代码;我对GetEntity的测试依赖于GetEntity方法和ConvertToBusiness方法:两个单元,所以是一个集成测试,而不是一个单元测试。但是,您会嘲笑运行时环境的方法吗?当然不是。单元测试和集成测试之间的界限不是很清楚。

从哲学上讲,在许多情况下,您无法创建良好的模拟对象。原因是,对于大多数方法,对象委托关联对象的方式是未定义的。它是否委托以及如何委托是由规范作为实现细节留下的。唯一的要求是,在委托时,该方法满足其委托的先决条件。在这种情况下,只有完全功能(非模拟)的委托才能完成任务。如果真正的对象检查它的先决条件,如果不能满足委托的先决条件,就会导致测试失败。并且调试这个测试失败将是容易的。

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

https://stackoverflow.com/questions/23630923

复制
相关文章
如何在 Python 中创建静态类数据和静态类方法?
在这里,为静态类数据定义一个类属性。如果要为属性分配新值,请在赋值中显式使用类名 -
很酷的站长
2023/02/25
3.5K0
如何在 Python 中创建静态类数据和静态类方法?
python中类的静态方法和类的类方法
类的静态方法,不需要self这类参数,因为类的静态方法,不需要进行实例化,就可以进行调用。
刘金玉编程
2019/08/30
3.2K0
如何对类中的private方法进行测试?
问题:如何对类中的private方法进行测试? 大多数时候,private都是给public方法调用的,其实只要测试public即可。但是有时由于逻辑复杂等原因,一个public方法可能包含了多个private方法,再加上各种if/else,直接测public又要覆盖其中每个private方法的N多情况还是比较麻烦的,这时候应该考虑单对其中的private方法时行测试了。那么如何进行呢?
跑马溜溜的球
2020/12/07
3.5K0
Python中类的静态方法、类方法及实例方法
经过测试可以发现 实例属性需要通过实例对象来访问,类属性通过类来访问,但在测验中 stu1.school 实例对象也能访问类属性,为什么呢?
ZackSock
2021/04/13
3K0
Python中类的静态方法、类方法及实例方法
Python中类的静态方法、类方法及实例方法
经过测试可以发现 实例属性需要通过实例对象来访问,类属性通过类来访问,但在测验中 stu1.school 实例对象也能访问类属性,为什么呢?
忆想不到的晖
2021/04/04
3K0
Python中类的静态方法、类方法及实例方法
Junit测试Service类方法教程
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
SmileNicky
2019/09/25
9880
python 类中的方法
上一篇中讲到 创建了类,并且重点讲述了构造函数以及类实例,特别是对那个self,描述了不少。在讲述构造函数的时候特别提到,init()是一个函数,只不过在类中有一点特殊的作用罢了,每个类,首先要运行它,它规定了类的基本结构。
全栈程序员站长
2022/06/29
1.4K0
类中的构造方法
构造方法是正常开发中不可或缺的一部分,是语法上必须存在的。是一个具有特殊格式的方法,且有特殊的调用方式。
星哥玩云
2022/09/14
1.1K0
类中的构造方法
验证码类
工具类 package com.utils; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage; import java.io.File; impor
码客说
2019/10/22
8690
如何对类中的protected方法进行单元测试
也许很多同学写单元测试时遇到这样的问题,一个类方法是 protected ,如何测呢 ? 当然,你可以说把 protected 改成 public 就可测了!没错,是可测了,可是 ......
跑马溜溜的球
2020/12/07
4K0
软件测试方法 -- 等价类边界值
测试用例是为了特定的目的而设计的一组测试输入、执行条件和预期的结果,以便测试是否满足某个特定需求。通过大量的测试用例来检验软件的运行效果,他是指导测试工作进行的依据。
EXI-小洲
2022/12/13
8520
软件测试方法 -- 等价类边界值
java中类中多个Synchronized方法
下面给出一个例子,说明一个class中有两个方法synchronized的情况。它们互相阻挡的用法和上面的“一个方法有synchronized”的情况是一样的。
马克java社区
2021/04/23
9070
java中类中多个Synchronized方法
java测试类的创建方法_java编写一个类
单元测试(unit testing) ,是指对软件中的最小可测试单元进行检查和验证。
全栈程序员站长
2022/11/02
5.3K0
springBoot中static类引用普通类的方法【工作】
需求: 要在一个工具类中引用其他项目包提供的一个API,直接引用会报错。 解决方案: 直接贴代码,主要是注意注解的使用; import com.test.api.basecode.BaseCodeAPI; /** * 功能描述:获取用户的工具类 * * @author: LIUY * @create: 2019-01-21 17:15 */ @Component @Slf4j public class SessionUtil { @Autowired private Login
用户5640963
2019/07/25
1.4K0
如何在 Django 中创建抽象模型类?
Django 中的抽象模型类是一个模型,它用作其他模型继承的模板,而不是一个旨在创建或保存到数据库的模型。在应用程序中,可以使用抽象模型定义多个模型共享的相似字段和行为。使用 Django,您可以定义一个派生自 Django.db.models 的模型类,以建立一个抽象模型类。
很酷的站长
2023/08/11
2650
如何在 Django 中创建抽象模型类?
如何在Vue中动态添加类名
能够向组件添加动态类名是非常强大的功能。它使我们可以更轻松地编写自定义主题,根据组件的状态添加类,还可以编写依赖于样式的组件的不同变体。
前端小智@大迁世界
2020/05/12
6.3K0
如何在java中创建不可变类?
今天我们将学习如何在java中创建不变的类。不可变对象是在初始化之后状态不变的实例。例如,String是一个不可变类,一旦实例化,它的值不会改变。
三产
2021/01/12
1.9K0
构造方法、类方法、类的复合
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/46794991
用户1451823
2018/09/12
1.2K0
python类:类方法和静态方法
http://blog.csdn.net/pipisorry/article/details/49516185
用户7886150
2020/12/01
8880
Dart 中类的静态成员、类的继承、覆写父类方法
1. Dart中的静态成员 定义静态成员 非静态方法可以访问静态成员以及非静态成员 静态方法没法访问非静态成员。 2. Dart中与方法有关的操作符 ? 条件运算符 is 类型判断 as 类型转换 .
越陌度阡
2020/12/08
3.3K0

相似问题

如何在测试其他类方法的测试中模拟类方法?

12

如何在RSPEC中测试类方法

50

如何在类组件中测试方法?

13

在不同的测试类中测试类的方法

11

如何在Scala中测试私有类方法?

84
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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