我的PHPUnit测试无效。它抛出了这个错误:
PHP致命错误:Class' app \ lib \ calculator'找不到 第7行/mnt/c/MAMP/htdocs/test/CalcTest.php
这是我的文件夹结构:
htdocs
|----app
| |---lib
| |---calculator.php
|----test
| |---CalcTest.php
|----vendor
| |---autoload.php (and standard folders of composer)
|
|----composer.json
|----composer.lock
|----index.php
|----phpunit.xml
我在这些php文件中使用了命名空间来解决这个问题!
Calculator.php中
<?php
namespace app\lib;
class Calculator {
public function add($a, $b) {
return $a + $b;
}
public function render() {
return "Hello World!";
}
public function returnTrue() {
return true;
}
public function returnArray() {
return ['Hey', 'World', 'This', 'Is', 'Test'];
}
}
?>
这里我想要一个带有名称空间的计算器:
CalcTest.php:
<?php
class CalcTest extends PHPUnit_Framework_TestCase {
public function testRenderReturnsHelloWorld() {
$calc = new \app\lib\calculator();
$expected = "Hello World";
$this->assertEquals($expected, $calc->render());
}
}
?>
phpunit.xml中phpunit的配置:
<?xml version="1.0" encoding="UTF-8" ?>
<phpunit bootstrap="./vendor/autoload.php"
color="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
stopOnFailures="false"
syntaxCheck="false"
>
<testsuites>
<testsuite name="PHPUnit Tuts">
<directory>./test/</directory>
</testsuite>
</testsuites>
</phpunit>
当我启动服务器时,即使index.php模板无效,也会抛出Error-500 ...
<?php
require_once 'vendor/autoload.php';
$calc = new \app\lib\calculator();
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>PHPUnit Tuts</title>
</head>
<body>
<h1><?php echo $calc->render(); ?></h1>
<pre><?php var_dump($calc->returnArray()); ?></pre>
<code><?php echo $calc->add(2,2); ?></code>
</body>
</html>
请不要使用require或require_once和 喜欢的功能。我想了解命名空间。
谢谢。
答案 0 :(得分:0)
看起来你没有为自己的课程设置任何自动加载设置。
这就是为什么phpunit不知道你的类或命名空间。
在作曲家文件中添加autoload
块:
{
"name": "acme/test",
"type": "project",
"autoload": {
"psr-4": {
"": "app/"
}
},
"require": {}
}
这将告诉作曲家在自动加载文件中包含您的应用程序文件夹。还要记住,您的命名空间略有不正确。
你应该有一棵看起来像这样的树:
├── composer.json ├── src │ └── Classes │ └── Test.php └── vendor ├── autoload.php
不是&#39; Classes&#39;文件夹和src目录。这不是必要的,但这是一种很好的做法。
完成后,您的PHPunit将会知道您的命名空间,因为composer会告诉它。请记住,您需要运行作曲家&#39; dump-autoload&#39;命令,如果你改变任何东西或添加东西。