c# - 什么定义了“隔离”测试?
问题描述
我有一个名为的类Customer
,我希望对这个类及其公共接口进行单元测试。为了能够进行单元测试,我必须Customer
独立于它的真正依赖项进行测试。除此之外Customer
,我有一个Monster
我创建的课程。
我的应用程序正在使用一个游戏框架,该框架定义了一个Shape
(代表一个形状)和Vec2F
一个(代表一个用于数学的向量)。Customer
依赖(使用)Shape
和Vec2F
。它还使用一个Monster
.
现在我必须模拟这些真正的依赖项,以便我的测试成为单元测试而不是集成测试。但是,什么定义了“真正的”依赖关系?就像我会理解为什么我会模拟我自己的实现,Monster
但是从我使用的框架来看Vec2F
,Shape
我使用的似乎是这样的基本结构。
解决方案
测试应与其他测试隔离。为此,您需要模拟被测系统消耗的任何全局状态。
如果被测系统不使用全局/共享状态 - 什么都不做。
在完美世界中,设置新数据库需要几毫秒,您可以为每个测试创建新数据库(EF Core 中的内存数据库)。
但是在我们的现实世界中,我们有代表全局状态的依赖项,如果不是,仍然会使测试变慢(Web 服务、文件系统、任何外部资源)。
您想模拟的那些依赖项以提供更快的反馈(单元测试)。
您可以拥有非常复杂的依赖层次结构,不使用全局状态或外部资源,但是使用这些依赖关系配置测试用例将变得非常复杂和困难。
在这种情况下,您将围绕非常非常复杂的依赖项引入一个抽象,并将在消费者的测试中模拟它。
在您的特定测试用例中,我不会模拟任何内容,除非框架类依赖于绘图屏幕逻辑(依赖于环境 API)。
推荐阅读
- spring-data-jpa - 单向 @OneToMany 在 jon 表上创建唯一索引,这是不期望的
- .net - 在 IIS windows 10 上部署时的 angular 和 .net core 2.2 Web.config 文件问题
- php - header() 函数在 siteground/wordpress 上重定向
- excel - 在 Excel 上,我如何判断依赖项所在的其他工作表?
- android - Dart 中的 Kotlin `apply()` 方法模拟
- python - “执行” f 字符串的内部函数的名称是什么?
- javascript - 为什么我的组件在从 API 获取数据后会挂载两次?
- excel - 双引号 VBA
- sql - ORACLE SQL - REGEXP_LIKE 包含第一个字符作为数字和第二个字符作为字母
- javascript - 当我在heroku中部署我的应用程序时获取html时出错