问题标签 [isolation-frameworks]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
298 浏览

ruby - 简化的 Ruby 代码部署

这是我想象中的开发和部署过程:

  1. 创建项目目录my_project
  2. 将所需的 Ruby 版本安装到其中。
  3. 安装所需的 gem。
  4. 写一些代码。
  5. 用来fpm包装整个东西。
  6. 将 debian 软件包运送到生产箱并安装。

我使用 RVM 和 Bundler 来解决一些痛点,但 RVM 并不关心创建可重定位的 Ruby 安装,因此您不能~/.rvm/rubies进入项目目录并期望一切顺利。您必须重写各种硬编码#!行,并且在某些情况下,您必须将.so文件移动到lib目录中。我通过搜索互联网编写了一组脚本,它们一起完成了我想要的,但整个事情感觉就像一个巨大的黑客攻击。

我不小心偶然发现了https://github.com/ot/bpt,它可以用来构建允许完全可重定位的 Ruby 安装的东西,但是该项目已经有两年多没有被触及了,所以我有点犹豫在它之上构建一些东西。

对于我没有看到的这个问题,有没有更优雅的解决方案?人们如何隔离和部署 Ruby 项目?我觉得这应该是一个已解决的问题。

0 投票
0 回答
336 浏览

c# - 如何在 c#.net 中记录和重放方法调用以对遗留代码进行隔离测试

我在一些遗留代码中有一个存储库和该存储库的使用者。

消费者对存储库进行多次方法调用。

每个方法调用都会返回一个巨大的结果集。

我确实有一个集成测试来检查消费者和存储库的行为方式,但这对我来说还不够好 - 它依赖于数据库连接,速度非常慢,并且无法帮助我知道测试是否因为以下原因而失败对存储库、数据库或使用者的更改。

我想将此集成测试转换为单独测试消费者 - 独立于存储库的实现。

但是因为它是遗留代码,我还没有完全理解它的行为,而且结果集很大,所以我不能手动存根存储库。如果可以手写这个,它看起来像

所以我更愿意做的是(一次)

之后

我已经开始研究一个通用工具来充当代理并记录和重放跨越接口边界的流量,以解决这个问题。

那里已经有类似的东西了吗?

还有其他方法可以解决存根存储库的问题吗

  • 返回大型数据集
  • 当数据集的内容只能通过观察现有行为来理解时(因为作者的意图不明确)。

如果没有,我将发布我的工具作为这个问题的答案。

0 投票
1 回答
41 浏览

c# - 我是否使用 nsubstitue 正确创建了假货?

我有一个任务是学习如何使用隔离框架。我想知道我是否正在使用 nsubstitute 以专有的方式制造假货。这是应用程序应该是什么样子的序列图这里

然后我进行了单元测试并提交了练习。有人告诉我,我没有使用隔离框架来制造假货(而不是之前我们自己制造的)。这是我的两个测试的示例:

所以我知道在这两个测试中都有一些问题是错误的,因为我需要两个存根,所以我对它们进行了一些更改,所以他们知道看起来像这样:

我正确使用 nsubstitute 吗?或者我是否还需要添加一些其他的东西(Alarm 类没有在这两个测试用例中使用,但 DoorControl 构造函数的参数需要它,所以我看不到存根它们的理由)?

0 投票
1 回答
145 浏览

c# - 使用接口或虚拟方法伪造依赖关系是一个好的设计选择吗?

我正在尝试学习单元测试,但会导致设计问题。考虑类 A 依赖于类 B。如果要为 B 创建存根以便对 A 进行单元测试,大多数隔离框架要求 B 必须是接口,或者 A 使用的所有方法都必须是虚拟的。B 本质上不能是具有非虚拟方法的具体类,以便进行单元测试。

这对生产代码的设计施加了重大限制。如果我必须为每个依赖项创建一个接口,那么类的数量将增加一倍。遵循单一职责原则会导致小类相互依赖,因此这会增加接口的数量。我还为易失性依赖项(将来可能会更改)或设计需要它以实现可扩展性创建接口。仅仅为了测试而使用接口污染生产代码将显着增加其复杂性。使所有方法都虚拟化似乎也不是一个好的解决方案。它给继承者的印象是这些方法可以被覆盖,即使它们不是,实际上这只是单元测试的副作用。

这是否意味着可测试的面向对象设计不允许具体的依赖关系,或者是否意味着不应该伪造具体的依赖关系?“必须伪造每个依赖项(存根或模拟)才能正确进行单元测试”是我到目前为止所学到的,所以我不认为后者是这种情况。JustMock 和 Isolator 之外的隔离框架不允许在没有虚拟方法的情况下伪造具体的依赖关系,有些人认为 JustMock 和 Isolator 的强大功能会导致糟糕的设计。我认为模拟任何类的能力非常强大,如果你知道自己在做什么,它将保持生产代码的设计干净。

0 投票
3 回答
1253 浏览

unit-testing - dotnet core 的无约束隔离(模拟)框架

我正在开发一个 dotnet 核心项目,试图在我的 Xunit.net 测试中模拟一些第三方类。我试图伪造的类无法通过 Moq 或 NSubstitute 等受限框架进行模拟。所以我需要一个不受约束的框架来做到这一点。

假设我想在我的.net 核心测试项目中伪造 DateTime.Now。

在 .net 4.5 中,我们有MSFakes (Moles)、Smocks 等。它们都不支持 dotnet 核心框架。Shim 尚未移植到 dotnet 核心。

有人知道目前可以实现我的 .NET Core 目标的任何隔离框架或技术吗?