【问题标题】:Why is exception "Undefined variable" thrown out?为什么抛出异常“未定义的变量”?
【发布时间】:2021-05-07 01:01:42
【问题描述】:

我有两个 php 文件。第一个func.php 包含一个函数,第二个funcTest.php 用于测试函数。
第一:

<?php
    function func(int $a, int $b, $data) {
          echo "$a, $b, $data";
          return $a + $b;
    }

第二:

<?php
    require_once "PHPUnit/Autoload.php";
    use PHPUnit\Framework\TestCase;
    
    $data = "Some data";

    var_dump($data);
    
    final class funcTest extends PHPUnit_Framework_TestCase {
        public function testFunc() {
            require "func.php";
            $this->assertEquals(3, func(1, 2, $data));
        }
    }

问题是当我在 cmd 中使用 phpunit 运行测试时,出现以下错误:

有 1 个错误:

  1. funcTest::testFunc 未定义变量:数据

C:\xampp\htdocs\someproject\funcTest.php:12

附:我在 SO 和其他论坛上发现了类似的问题,但没有一个对我有帮助。所以请不要关闭或DISS我的问题。

【问题讨论】:

  • 变量作用域是任何编程语言的基础之一。我建议你彻底阅读奈杰尔链接的问题,你真的到处都需要这些知识。
  • require_once "PHPUnit/Autoload.php";use PHPUnit\Framework\TestCase;PHPUnit_Framework_TestCase 的组合没有意义。您正在混合不同版本的 PHPUnit。
  • @NigelRen 哦,我明白了。我尝试在 funcTest.php 文件的全局范围内编写 require "func.php",现在它可以工作了!谢谢。
  • @NigelRen 你会写答案吗?我会把它标记为解决我的问题

标签: php phpunit


【解决方案1】:

正如其他人所提到的,阅读变量范围很不错

$data = "Some data";

var_dump($data);

final class funcTest extends PHPUnit_Framework_TestCase {
    public function testFunc($data) // <---- You need to pass the $data variable into the method
    
    {
        require "func.php";
        $this->assertEquals(3, func(1, 2, $data));
    }
} 

// instantiate and call the method
$test = new funcTest;
$test->testFunc($data); //<--- Pass in the $data variable when calling the method

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-09-30
    • 2016-03-26
    • 2016-12-18
    • 2021-10-05
    • 1970-01-01
    • 2020-02-20
    • 1970-01-01
    • 2010-12-09
    相关资源
    最近更新 更多