Невозможно изменить имя метода в PHPUnit

Я использую PHPUnit 4.2.2 внутри локальной установки Composer. Я также использую PHP CodeSniffer 2.2.0.

Я написал этот тестовый модуль:

<?php

include_once 'animals/Cat.php';

class CatAgeTest extends PHPUnit_Framework_TestCase{

public function testTrueIsTrue(){

$kittyAgeTest = new Cat("steak");
$result = $kittyAgeTest->getAge() >=5 && $kittyAgeTest->getAge() <= 10;
$this->assertTrue($result);

}
}

?>

Проходит, пока я не поменяю имя метода. Это единственное, что я изменил, и я пробовал много разных имен. Вот пара примеров:

testCatAgeBetweenFiveAndTen
catAgeTest
catAgeShouldBeBetweenFiveAndTen

… и так далее.

Вот мой phpunit.xml:

<?xml version="1.0" encoding="UTF-8"?>
<phpunit bootstrap="vendor/autoload.php" colors="true">
<testsuites>
<testsuite name="Application Test Suite">
<directory>./tests/</directory>
</testsuite>
</testsuites>
</phpunit>

У меня есть несколько других модульных тестов — в разных проектах, с одинаковой конфигурацией — на одном компьютере. Я пытался изменить их имена, но это не приводит к их провалу.

Я использовал эти команды для запуска модуля php:

vendor/bin/phpunit

vendor/bin/phpunit tests/CatAgeTest.php

Вот мой файл composer.json (на всякий случай, если это поможет):

{
"require": {
},
"require-dev": {
"phpunit/phpunit": "4.2.2",
"squizlabs/php_codesniffer": "2.2.0"},
"autoload": {
"psr-0": {
"animals": ""}
}
}

Любая помощь будет принята с благодарностью!

Редактировать:

Вот мой файл Cat.php:

<?php

include_once("Animal.php");

class Cat extends Animal{

protected $name;
protected $species;
protected $speakCount;
protected $age;

public function __construct($name = "MewMew") {
$this->name = $name;
$this->age = rand(5, 10); // Random age
$this->species = "Feline"; // For testing in the DB
$this->namesHist = array(); // Names history
array_push($this->namesHist, $name);
}

public function getAge(){
return $this->age;
}

public function getSpecies(){ // For testing in the DB
return $this->species;
}

public function speak($word = "Meow.") { // Spoken word and word count
$this->speakCount += 1;

$this->speakCount % 5 == 0 ? $this->age += 1 : $this->age;

return $word;
}

public function getSpeakCount() {
return $this->speakCount;
}

public function setName ($newName) {
$this->name = $newName;
array_push($this->namesHist, $newName);
}

public function getNames() {
return $this->namesHist;
}

public function getAverageNameLength() {

$nameLen=0;

foreach($this->namesHist as $i) {
$nameLen += strlen($i);
}

$avgNL = round($nameLen/(count($this->namesHist)), 2);
return "Average Name Length: " . $avgNL;

}
}

?>

… и вот мой файл Animal.php:

<?php

Class Animal {

protected $name;
protected $age;
protected $favoriteFood;

public function __construct($name, $age, $favoriteFood) {
$this->name = $name;
$this->age = $age;
$this->favoriteFood = $favoriteFood;
}

public function getName() {
return $this->name;
}

public function getAge() {
return $this->age;
}

public function getFavoriteFood() {
return $this->favoriteFood;
}

public function setName ($newName) {
$this->name = $newName;
}

public function setAge ($newAge) {
$this->age = $newAge;
}

public function setFavoriteFood($newFavoriteFood) {
$this->favoriteFood = $newFavoriteFood;
}
}

?>

Edit2:

Вот ошибка, которую я получаю:

PHPUnit 4.2.2 by Sebastian Bergmann.

Configuration read from /var/www/php/misc/ap/phpunit.xml

F

Time: 15 ms, Memory: 2.75Mb

There was 1 failure:

1) Warning
No tests found in class "CatAgeTest".

FAILURES!
Tests: 1, Assertions: 0, Failures: 1.

1

Решение

Предупреждение PHPUnit указывает на то, что в вашем тестовом классе нет методов тестирования.

1) Warning
No tests found in class "CatAgeTest".

PHPUnit будет принимать методы с именами, начинающимися с test*() и имея public видимость как методы испытаний. Также возможно объявить метод вне этого соглашения об именах с @test Атрибут docblock для обозначения его в качестве метода тестирования.

Эти методы именования и описания соглашений документированы здесь

Тесты являются открытыми методами, которые называются test *.

Кроме того, вы можете использовать аннотацию @test в docblock метода, чтобы пометить его как тестовый метод.

Учитывая это требование, имя вашей попытки метода testCatAgeBetweenFiveAndTen() должен быть допустимым методом тестирования для PHPUnit.

Ваши другие заявленные попытки присвоения имен не соответствуют требованию PHPUnit и не будут найдены (catAgeTest(), catAgeShouldBeBetweenFiveAndTen()) если вы также не аннотируете их @test атрибут:

/**
* @test
*/
public function catAgeTest(){
$kittyAgeTest = new Cat("steak");
$result = $kittyAgeTest->getAge() >=5 && $kittyAgeTest->getAge() <= 10;
$this->assertTrue($result);
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]