仅在测试期间使用特殊的构造函数是否有代码味道?

2024-01-05

假设我有一堂课Foo仅用类的实例实例化Bar:

public Foo(Bar x) {
    this.a = x.a();
    this.b = x.b();
    ...
}

现在我想测试一下Foo,进一步假设一个实例Bar想要达到的状态是很难创造的。作为附加约束,字段a, b, ...被声明为最终的,因此该字段的设置器不可用。

一种可能是在 Foo 中创建一个额外的构造函数:

protected Foo(A a, B b, ...) {
    this.a = a;
    this.b = a;
    ...
}

该构造函数仅在测试期间使用,我将在该构造函数的注释中声明。

问题:这是代码味道吗?

我想到的另一个解决方案是嘲笑Bar。想知道在这种情况下这是否是最佳实践?


Mocking Bar 更有可能被认为是最佳实践。您应该能够创建一个 MockBar,这样您就可以执行以下操作

Foo foo = new Foo(new MockBar(a, b));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

仅在测试期间使用特殊的构造函数是否有代码味道? 的相关文章

随机推荐

  • 证书安装访问被拒绝错误

    我正在尝试在 localMachine Root 中添加证书 下面是我尝试过的代码 但这不允许我添加到本地计算机中 而添加它时说访问被拒绝 如何允许安装在本地计算机内 X509Certificate2 cert new X509Certif
  • 使用 Firestore 时如何为 RecyclerView 添加搜索过滤器?

    所以 我正在尝试创建显示作者列表 图像 姓名 简介 的应用程序 但问题是我在实现搜索功能时遇到问题 合作指南RecyclerView我用的是here https android jlelse eu fetch data from fireb
  • 如何删除R中箱线图中的异常值? [复制]

    这个问题在这里已经有答案了 可能的重复 更改箱线图中的异常值规则 https stackoverflow com questions 4994313 changing the outlier rule in a boxplot 我需要使用箱
  • 验证 ASP.NET 中的查询字符串

    是否有一个库可以在我当前的 ASP NET 应用程序中使用来验证查询字符串 编辑 使用正则表达式查找模式 例如字符串 仅 仅数字 长度为x的字符串 等 Thanks 不知道库 但您可以使用它来检查查询字符串是否存在 if String Is
  • 可以在工具栏中添加图像视图吗?

    我需要有关的信息Toolbar 我想在我的中添加四张图片Toolbar例如主页 新闻 搜索和消息 所以我把Imageview是在Toolbar 现在我不知道如何在这些图像上添加侦听器 我该怎么做 我还有一个导航抽屉 我想要它 如果你按Ima
  • 身份不是使用 WIF 的 IClaimsIdentity(在 ASP.NET MVC 4 / Azure 上)

    我有 VS2012RC 的 WIF 工具 并且我正在尝试让我的 ASP NET MVC 4 项目使用它们 我已经安装了NuGet包 https nuget org packages Microsoft IdentityModel 3 5 0
  • LuaSocket、Lua 5.2 和 Redis

    有谁能够让这些一起工作吗 我已经得到 5 2 工作得很好 它可以找到 lua redis redis lua 但是它无法加载套接字模块 我似乎无法使用 lua LuaSocket 版本 2 0 2 有人有任何建议可以让这个工作吗 我尝试过制
  • 向 iOS 应用程序添加一个对所有视图可见的顶栏

    在选项卡栏 iOS 应用程序中添加顶部栏 视图 的最佳方法是什么 该顶部栏始终保留在所有视图的顶部 无论选择哪个选项卡 如下图所示 我会使用 UIViewController Containment 看一眼 https developer
  • VBA 求解器不循环

    我试图在多个列上使用求解器 用户定义的确切列数 看完这里的问题后 我仍然找不到我的代码有什么问题 我对 VBA 还很陌生 当我运行它时 它在第一年运行良好 但不适用于接下来的几年 Dim wsFM B3 As Worksheet Set w
  • 如何使用Traceur在ES6类中实现私有方法[重复]

    这个问题在这里已经有答案了 我现在使用 Traceur Compiler 来利用 ES6 功能 我想从 ES5 实现这些东西 function Animal var self this sayHi sayHi function self h
  • 如何使用 JDBC 驱动程序和 SSL 连接连接到 Sybase ASE

    我尝试使用 JDBC 驱动程序建立与 Sybase ASE 15 7 的 SSL 连接 但没有成功 我尝试了以下选项 使用 JTDS 1 25 驱动程序 jtds 1 2 5 jar 使用以下连接字符串 jdbc jtds sybase h
  • MATLAB 中的套接字编程?

    我有两台运行 MATLAB 的机器 我需要在它们之间交换信息 数字 图像 MATLAB 有没有办法可以做到这一点 如果你有并行计算工具箱 http www mathworks com products parallel computing
  • Spring MVC ajax 重新渲染用户界面重复

    首先我主要是JSF背景 我最近开始学习Spring MVC 困扰我的一件事是使用时ajax重新渲染Spring MVC and JQuery 让我们想象一下我在我的代码中定义了一个复杂的形式people jsp view
  • 使用命名空间访问 XML 属性

    如何使用命名空间访问属性 我的 XML 数据采用某种形式 val d
  • 类似图像映射的 Blackberry 控件 - CLDC 应用程序

    有谁知道我可以在 CLDC 应用程序中使用类似图像映射的 Blackberry Control 如果没有 是否有一种方法可以获取 MainScreen 或 BitmapField 派生控件上的单击 x y 坐标 Thanks 我假设您正在考
  • getch() 按一次箭头键读取两个字符

    今天我正在测试按键在 C 中如何工作 并为其制作了简单的循环 发现 getch 由于某种原因重复自身或不知道到底发生了什么 只需看看 include
  • 使用 PHP 读取“块”文件

    在 php 中通过相对较小的数据块读取文件的最佳方法是什么 例如 读取 5MB 然后释放该内存并读取另外 5MB 我正在用 php 编写一个解析工具 需要读取一个巨大的文件并将其转换为 CSV 我的问题是我不断超出允许的内存限制 并且在我的
  • Ansible 在 Windows 主机上创建 zip 文件备份

    我想将 windows 目录压缩成 zip 文件 存档功能不起作用 对于我看到的窗户win unzip模块 但我没有找到win zip module 我们如何备份Windows中现有的文件夹 name Backup existing ins
  • 如何在 Spring 4 中混合使用 Cglib 和 JDK Proxy

    我是 Spring AOP 的新手 目前正在使用基于注释的方面方法 我对 spring 4 中的代理策略有疑问 有什么方法可以强制 spring 为具体类创建 cglib 代理 并为在同一应用程序上下文中实现接口的类创建 jdk 代理 这就
  • 仅在测试期间使用特殊的构造函数是否有代码味道?

    假设我有一堂课Foo仅用类的实例实例化Bar public Foo Bar x this a x a this b x b 现在我想测试一下Foo 进一步假设一个实例Bar想要达到的状态是很难创造的 作为附加约束 字段a b 被声明为最终的