@sl1m_dogg

Что не так с моими тестами на PHP?

<?php

namespace Tasks\tests;

/*
require_once '../tasks/task3/Lesson.php';
require_once '../tasks/task3/Grammar.php';
require_once '../tasks/task3/Speaking.php';
require_once '../Tasks/task3/Strategy/CostStrategy.php';
require_once '../tasks/task3/Strategy/TimeStrategy.php';
require_once '../tasks/task3/Strategy/FixedStrategy.php';
*/
use Tasks\task3\Grammar;
use Tasks\task3\Speaking;
use Tasks\task3\Strategy\FixedStrategy;
use Tasks\task3\Strategy\TimeStrategy;

class TestLessons extends \PHPUnit_Framework_TestCase
{
    public function testLessonsGrammarFixedCostGood()
    {
        for ($i = 0; $i < 2; $i++) {
            $grammar = new Grammar(2, new FixedStrategy());
            $this->assertEquals(600, $grammar->cost());
        }
    }

    public function testLessonsSpeakingTimedCostGood()
    {
        for ($i = 0; $i < 2; $i++) {
            $spaeking = new Speaking(3, new TimeStrategy());
            $this->assertEquals(900, $spaeking->cost());
        }
    }

    public function testLessonsGrammarTimedCostBad()
    {
        for ($i = 0; $i < 2; $i++) {
            $grammar = new Grammar(3, new TimeStrategy());
            $this->assertNotEquals(900, $grammar->cost());
        }
    }
}


Когда запускаю phpunit TestLessons.php пишет Class Tasks\task3\Grammar not found, в композере psr-0 норм прописан, пытался phpunit --bootstrap path_to_autoload, пытался прямо в тесты рекуаер подключить, все тоже самое
  • Вопрос задан
  • 334 просмотра
Пригласить эксперта
Ответы на вопрос 3
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
Режим телепата:

1. Вместо use Tasks\task3\Grammar; все таки правильнее писать use \Tasks\task3\Grammar;

2. Покажите начало файла tasks/task3/Grammar.php

3. Насколько я помню без явного указания --bootstrap, автозагрузка работать не будет - но раз у Вас все падает и с require_once проблема явно не в этом.
Ответ написан
@sl1m_dogg Автор вопроса
<?php

namespace Tasks\task3;

use Tasks\task3\Strategy\CostStrategy;

class Lesson
{
    protected $duration;

    protected $costStrategy;

    public function __construct($duration, CostStrategy $strategy)
    {
        $this->duration = $duration;
        $this->costStrategy = $strategy;
    }

    public function cost()
    {
        return $this->costStrategy->cost($this);
    }

    public function chargeType()
    {
        return $this->costStrategy->chargeType();
    }

    public function getDuration()
    {
        return $this->duration;
    }
}


Grammar просто экстендится от этого класса
Ответ написан
Комментировать
@smple
после добавления записи с psr может ты забыл сделать composer update ?
выложи файлы:
autoload_classmap.php
autoload_namespaces.php
autoload_psr4.php
autoload_real.php

посмотри там объявлены ли твои namespace и где их композер ищет.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы