如何对实例创建进行单元测试?

2024-03-02

我有一个Carpenter类,它的工作使用Lathe and a Wood object.

class Carpenter
{
    function Work()
    {
        $tool = new Lathe();
        $material = new Wood();
        $tool->Apply($material);
    }
}

Lathe取决于一个名为的接口Material,这样我就可以轻松进行单元测试Lathe给它一个假的Material在我的单元测试中。Wood不依赖于任何东西,因此也可以轻松测试。

interface Material {
    // Various methods...
}

interface Tool {
    function Apply(Material $m);
}

class Wood implements Material  {
    // Implementations of Material methods
}

class Lathe {
    function Apply(Material $m) {
        // Do processing
    }
}

然而,Carpenter取决于具体的类Lathe and Wood因为它必须创建它们的实例。这意味着就目前而言,我无法对Work()方法不经意间带来Lathe and Wood正在测试中。

我应该如何将我的设计更改为单元测试Carpenter?


您可以在这里采取几个不同的方向:

  • Use 构造函数注入并简单地将工具和材料实例注入木匠中。
  • 如果由于某种原因注入实例不起作用(可能是因为您需要为 Work 方法的每次调用创建新实例),您可以注入抽象工厂反而。
  • 您还可以使用工厂方法ctford 描述的方法,但这要求您还创建特定于测试的覆盖以便能够进行单元测试,虽然这是完全有效的事情,但它只是更多的工作,并且在许多情况下其他替代方案更好、更灵活。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何对实例创建进行单元测试? 的相关文章

随机推荐

  • 缺少引用 OLEDB 连接类型的库

    我从以下代码中得到了SSIS 团队博客 http blogs msdn com b mattm archive 2008 08 22 accessing oledb connection managers in a script aspx转
  • 无法访问的服务 - appsactivity

    我今天在执行我的 google apps 脚本 webapp 时开始收到消息 无法访问服务 appsactivity 有谁知道是否会停电 无法访问的服务 appsactivity 之前的答案是正确的 但提到的问题现已作为重复项关闭 http
  • 使用 Python 和 Selenium 将照片上传到 Craigslist

    在windows10上使用python3 selenium和firefox 这个程序很简单 它直接跳转到 craigslists 的 发布新列表 页面 上传多张照片 然后提交 我遇到的问题是我无法控制对话框使用硒导航到正确的文件 brows
  • 多个 MessageDialog 应用程序崩溃

    I use MessageDialogues在我的应用程序的几个地方 问题是 无论何时MessageDialog 或系统警报 例如功能警告 处于活动状态 另一个我的MessageDialog被调用时 应用程序毫无例外地崩溃或崩溃Unatho
  • 不同用户的会话超时时间不同

    是否可以为不同的用户设置不同的会话超时 我需要为管理员提供 180 分钟的会话 为非管理员用户提供 20 分钟的会话 目前 所有用户的单个会话超时 我们正在使用 web config 密钥 任何帮助 将不胜感激 Setting Sessio
  • MICE 中的条形图不显示分类变量

    我正在使用miceR 中的包进行多重插补 我仅使用数值变量进行了几次插补 插补方法是预测均值匹配 当我使用stripplot imp 我可以看到所有变量的观察值和估算值 当我估算分类变量和数值变量的组合时 就会出现问题 数值变量的插补方法是
  • 为什么 Akka Streams 会吞掉我的异常?

    为什么异常在 import akka actor ActorSystem import akka stream ActorMaterializer import akka stream scaladsl Source object Test
  • 如何在android中对齐自定义对话框中心?

    我正在开发一个应用程序 我想将对话框显示为屏幕尺寸 所以我使用了下面的代码 我通过这里得到了解决方案警报对话框中未显示警报消息 https stackoverflow com questions 10432184 alert message
  • MySQL vs. SQL Server vs. Oracle [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我一直只使用MySQL 没有使用其他数据库系统 今天在公司会议上提出了一个问题 我很尴尬我不知道 对于开发人员来说 MS 或 Oracle
  • 日志在 yii2 中不起作用

    我想在 app log 中添加日志 我的配置文件 log gt traceLevel gt YII DEBUG 3 0 targets gt file gt class gt yii log FileTarget levels gt err
  • 如何多次执行带参数的 Rake 任务?

    这是不可能的invoke循环内相同的 rake 任务不止一次 https stackoverflow com questions 4822020 rake task in loop executes only first task 但是 我
  • 将PIL图像传递到google云视觉,无需保存和读取

    更新如下 有没有办法将 PIL 图像传递到谷歌云视觉 我尝试使用io Bytes io String and Image tobytes 但我总是得到 Traceback most recent call last C Users visi
  • 开发占用空间较小的 Spring Boot 应用程序

    为了让我们在 spring boot 中开发并在 Cloud Foundry 上运行的微服务占用空间更小 我们正在寻找实现这一目标的最佳方法 任何朝这个方向的输入或指示都将受到欢迎 最好总是从最低限度的依赖项开始向上构建应用程序 并且仅在需
  • Volley 加上列表适配器中的 OutOfMemoryError

    我在用凌空加 https github com DWorkS VolleyPlus图书馆 我正在展示ListView图像和文本视图没有错误 但是当我在这个列表视图中上下滚动很多时间时 它得到OutOfMemoryError并使应用程序崩溃
  • R Roxygen 链接到父函数

    考虑一个基础包XYZ 别人写的 有一个函数ABC 我想扩展功能ABC通过以下方法在我的新 不是 XYZ 包中 ABC lt function INSERT EXTRA WORK CALL THE BASE METHOD XYZ ABC 现在
  • 如何将控制器包含在 Ruby on Rails gem 中?

    我正在尝试为一个开源项目做出贡献 我需要一个控制器来处理几个需要提交的表单 我在 gem 内的一个目录中创建了这些控制器 名为app controllers gemname my controller rb 但是 当我尝试访问控制器时 它似
  • Mac中如何获取usb设备的设备描述符和配置描述符?

    I have minimum exposure to xcode and I Okit framework I have seen device descriptor and configuration descriptor of a us
  • 使用 PhantomJS 设置远程调试

    我正在尝试使用 PhantomJS 设置远程调试 但运气不佳 我正在按照以下说明进行操作https github com ariya phantomjs wiki Troubleshooting https github com ariya
  • r、ggplot2、形状/颜色。它们之间有什么区别?

    set seed 123 library data table library ggplot2 dat data table data frame a rnorm 12 b rnorm 12 c rep c 1 2 6 d rep c 1
  • 如何对实例创建进行单元测试?

    我有一个Carpenter类 它的工作使用Lathe and a Wood object class Carpenter function Work tool new Lathe material new Wood tool gt Appl