首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何测试使用构造变量的类方法

如何测试使用构造变量的类方法
EN

Stack Overflow用户
提问于 2015-09-23 19:00:08
回答 2查看 72关注 0票数 1

Game.php

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php

class Game
{
    public $db;

    public function __construct()
    {
        $this->db = new DB;
    }

    public function result()
    {
        return $this->db->data();
    }
}

DB.php

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php

class DB
{
    public function data()
    {
        return false;
    }
}

GameTest.php

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php

use Mockery as m;

class GameTest extends PHPUnit_Framework_TestCase
{
    public function testResult()
    {
        $game = m::mock(new Game);
        $game->shouldReceive('data')
            ->once()
            ->andReturn(true);
        $expected = $game->result();

        $this->assertTrue($expected);
    }

    public function tearDown()
    {
        m::close();
    }
}

这是我的解决方案,但完全不起作用,我想如果我想从__construct获得设置,我需要模拟一个新的类,我收到消息Failed asserting that false is true.,这意味着模拟的东西不工作,如何处理它?

EN

回答 2

Stack Overflow用户

发布于 2015-09-29 14:21:26

你不能这样做,最好的解决方案是对$db使用依赖注入。这样你就只能这样模拟DB了.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$dbMock = m::mock('DB');
$dbMock->shouldReceive('data')
      ->once()
      ->andReturn(true);

或者你可以像这样保留你的构造函数(没有依赖注入),但是你也必须模拟这个构造函数。

票数 0
EN

Stack Overflow用户

发布于 2016-02-01 14:42:30

您可以通过为DB类创建一个“实例模拟”来使用模拟,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$dbMock = Mockery::mock('overload:MyNamespace\DB');

这将在创建DB类的新实例并使用$dbMock时进行“拦截”。在创建$dbMock时,您只需要为给定的方法添加一个期望声明:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$dbMock->shouldReceive('data')
  ->once()
  ->andReturn(true);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32747460

复制
相关文章
软件测试|什么是Python构造方法,构造方法如何使用?
构造方法(Constructor)是面向对象编程中的重要概念,它在创建对象时用于初始化对象的实例变量。在Python中,构造方法是通过特殊的名称__init__()来定义的。本文将介绍Python构造方法的基本概念、语法和用法。
霍格沃兹测试开发Muller老师
2023/08/08
2860
软件测试|什么是Python构造方法,构造方法如何使用?
软件测试|什么是Python构造方法,构造方法如何使用?
构造方法(Constructor)是面向对象编程中的重要概念,它在创建对象时用于初始化对象的实例变量。在Python中,构造方法是通过特殊的名称__init__()来定义的。本文将介绍Python构造方法的基本概念、语法和用法。
霍格沃兹测试开发Muller老师
2023/10/13
1880
构造方法、类方法、类的复合
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/46794991
用户1451823
2018/09/12
1.2K0
类中的构造方法
构造方法是正常开发中不可或缺的一部分,是语法上必须存在的。是一个具有特殊格式的方法,且有特殊的调用方式。
星哥玩云
2022/09/14
1.1K0
类中的构造方法
java学习之路:14.类的构造方法,静态变量,常量和方法,类的主方法
类中除了成员方法,还有一种特殊的方法,那就是构造的方法。构造方法是一个与类同名的方法,对象的创建就是通过构造方法完成的,每当类实例化一个对象时,类都会自动调用构造方法。 构造语法如下: public Book() { //构造方法体 } 在构造方法中可以为成员变量赋值,这样当实例化一个本类的对象时,相应的成员变量也将被初始化, 如果类中没有明确定义构造方法,编译器会自动创建一个不带参数的默认构造方法。 如果在类中定义的构造方法都不是无参的构造方法,那么编译器也不会为类设置一个默认的无参构造方法,当试图调用无参构造方法实例化一个对象时,编译器会报错,所有只有在类中没有定义任何构造方法时,编译器才会在该类中自动创建一个不带参数的构造方法。
花狗Fdog
2020/10/28
9430
dart(四)--类、构造函数、方法dart(四)--类、构造函数、方法
类 构造函数 构造函数 className 或 className.identifier, 关键字 new 可选. 构造函数语句执行顺序:初始化器,父类构造函数,子类构造函数。 class Point { num x, y, distance; /* 1,匿名构造函数 2,使用this.x 简化写法,原写法: Point(num x , num y) 3,此处 : 后为初始化器,初始化的结果赋值给初始化器的对象,是最简洁的方式。
用户8893176
2021/08/09
1.4K0
Class工具类-获取类/成员变量/构造函数
public class ClassUtil { /** * @Author: www.itze.cn * @Date: 2020/9/17 16:08 * @Email: 814565718@qq.com * 打印类的信息,包括类的成员函数,变量 * @param object 该对象所属类的信息 */ public static void printClassMessage(Object object) { //
itze
2022/10/25
9890
Class工具类-获取类/成员变量/构造函数
python中类的构造方法
如果是继承关系,那么子类也有构造方法。如果子类存在构造方法,继承关系成立后,最终的结果也还是以子类的构造方法为准。
刘金玉编程
2019/08/13
2.1K0
Swift 类构造器的使用
个人觉得这句话还是蛮有道理的. 反正对于我来说, 每过一段的时间回过头来看自己写的代码都感觉有很大的重构空间, 很多地方写的不够 PERFECT, 虽然我不是一个处女座, 但是对于代码的健壮和整洁还是很注意的.
ios-lan
2020/09/27
1.7K0
Java中String类的构造方法
String代表字符串,字符串是由多个字符组成的一串数据,字符串可以看成字符数组, 1.字符串字面值“abc”也可以看成一个字符串的对象 2.字符串是常量,一旦被创建,就不能改变 3.字符串可以看做是一个长度固定的有序字符序列,每个组成的字符编有索引从0开始
用户7886150
2021/02/26
6780
面向Java对象和类、构造方法以及调用非构造方法
对象:对象是类的一个实例(对象不是找个女朋友),有状态和行为。例如,一条狗是一个 对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。
用户5224393
2019/08/20
1.2K0
面向Java对象和类、构造方法以及调用非构造方法
java学习之StringBuffer类的构造方法
StringBuffer类的构造方法 public stringbuffer()空参构造方法 public stringbuffer(int capacity)指定容器容量的字符串缓冲区对象 public stringbuffer(shring str)指定字符串的字符串缓冲区对象 package com.ifenx8.studay; public class Demo_StringBuffer { /** * A:StringBuffer的构造方法: * public StringBuffer(
吾爱乐享
2018/07/13
4430
【Python】面向对象 ③ ( 构造函数 | 成员变量赋值问题 | 构造方法引入 | 构造函数可以同时定义成员变量 )
如果要为其成员变量赋值 , 需要分别为 name 和 age 两个成员变量赋值 ,
韩曙亮
2023/10/11
3670
【Python】面向对象 ③ ( 构造函数 | 成员变量赋值问题 | 构造方法引入 | 构造函数可以同时定义成员变量 )
Android 通过 JNI 调用 Java 类的构造方法和父类的方法
Android 还可以通过 JNI 来调用 Java 一个类的构造方法,从而创建一个 Java 类。
音视频开发进阶
2019/07/26
2.7K0
如何对类中的private方法进行测试?
问题:如何对类中的private方法进行测试? 大多数时候,private都是给public方法调用的,其实只要测试public即可。但是有时由于逻辑复杂等原因,一个public方法可能包含了多个private方法,再加上各种if/else,直接测public又要覆盖其中每个private方法的N多情况还是比较麻烦的,这时候应该考虑单对其中的private方法时行测试了。那么如何进行呢?
跑马溜溜的球
2020/12/07
3.5K0
Scanner类的概述及其构造方法
Scanner类的概述及其构造方法 1 package cn.itcast_01; 2 3 /* 4 * Scanner类  在JDK5以后出现的用于键盘录入数据的类。 5 * 6 * 前面的时候用Scanner类的步骤: 7 * A:导包 8 * B:创建对象 9 * C:调用方法 10 * 11 * System类下有一个静态的字段(字段=成员变量=事物属性): 12 * 比如: 13 * class Syste
黑泽君
2018/10/11
5580
用反射获取构造方法 Constructor类
样例代码: 先创建一个类 public class DEmo { int id; String name; double val; public DEmo() { super(); } public DEmo(int id) { super(); this.id = id; } private DEmo(int id, String name, double val) { super(); this.id = id; this.name = name; this
用户2965768
2019/03/15
5720
用反射获取构造方法 Constructor类
测试类的使用
当前使用的对象没有被实例化(对象里的值是null),而直接调用对象中的属性或方法所产生的异常。
用户10787181
2023/10/17
1230
测试类的使用
[javaSE] 反射-获取类的成员属性和构造方法
成员属性和构造方法皆为对象,通过Class对象的方法可以得到 package com.tsh.reflect; import java.lang.reflect.Constructor; import java.lang.reflect.Field; public class ReflectDemo { public static void main(String[] args) { printClassFields(new Integer(1)); printC
唯一Chat
2019/09/11
1.1K0
点击加载更多

相似问题

如何使用Spring测试具有@PostConstruct方法的类的构造函数?

410

如何测试使用类方法的类方法

10

如何使用私有构造函数测试类

19

如何使用Mockito/Powermock测试带有构造函数参数的类的方法

11

使用Jest的单元测试类构造函数和方法

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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