Solucionado (ver solução)
Solucionado
(ver solução)
8
respostas

Duvida

Eu preciso criar uma função na qual se o numero for divisível por 3 ele retornar Fizz, porem estou com bastante dificuldade nesse curso poderia me ajudar? se estou indo pelo caminho certo

public $fizz = 3;
 public function retornaFizz(Numero $numero){
        if ($numero / $this->fizz == 0){
            echo "Fizz";
        } else {
            echo "Sem essa de fizbuzz";
        }
    }
}
8 respostas

Olá Victor!

Não sou especialista em PHP mas estou disponível para te ajudar!

Testei seu código e encontrei alguns erros:

1 - Para você usar o Public suas variáveis e métodos precisam estar dentro de uma classe. Como não visualizei uma classe, recomendaria remover o Public.

2 - Quando você usa retornaFizz(Numero $numero) você está dizendo que a variável $numero é do tipo Numero (da classe Numero) mas a principio não me parece existir essa classe (ou existe)? Mesmo que existe nesse caso não seria necessário usar. Pode tirar o "Numero" e deixar só a variável.

3 - Também encontrei um erro na expressão: $numero / $this->fizz == 0. Troquei ela por: $numero % 3 == 0.

O operador de porcentagem (%) nos retorna o resto da divisão. Sempre que queremos saber se um número é divisível por outro usamos ele. Se usamos o simbolo de divisão (/) podemos ter problema. Pois:

3 / 3 é igual a zero então ele retorna Fizz 6 / 3 é igual a 2 então ele retornaria "Sem essa de fizbuzz".

Repare que 6 é um numero divisível por 3 mas usando o simbolo de divisão (/) não conseguimos capturar isso. Precisamos do simbolo que pega o resto da divisão (%).

4 - Pra finalizar, é só chamar sua função e testar :D

function retornaFizz($numero){
        $fizz = 3;
        if ($numero % $fizz == 0){
            echo "Fizz";
        } else {
            echo "Sem essa de fizbuzz";
        }
    }

retornaFizz(4);

Espero que tenha ajudado! :D

Bons estudos! ^^

Entendi, agora fez sentido. Por exemplo no meu caso estou usando Dois Arquivos fizzbuzz.php e o FizzBuzzTest.php

fizzbuzz.php :

<?php
class FizzBuzz {

    public $numero = null;

    public function __construct($numero = null) {
        $this->numero = $numero;
    }
}

?>

FizzBuzzTest.php

require_once('fizzbuzz.php');

class fizzbuzzTest extends PHPUnit_Framework_TestCase {

    public function testExisteFizzBuzz(){
        $fizzbuzz = new FizzBuzz();
        $existe = is_a($fizzbuzz, 'FizzBuzz');
        $this->assertEquals(true, $existe);
    }

    public function testRecebendo() {
        $fizzbuzz = new FizzBuzz(3);
        $this->assertEquals(3, $fizzbuzz->numero);
    }

    function retornaFizz($numero){
        $fizz = 3;
        if ($numero % $fizz == 0){
            echo "Fizz";
        } else {
            echo "Sem essa de fizbuzz";
        }
    }retornaFizz(4);
}


?>

Ele me retorna erro no

}retornaFizz(4);

eu preciso colocar essa função na classe e chamar ela no FizzBuzzTest.php ?

Se tiver programando orientado a objetos a recomendação é que as funções fiquem na classe e você as chame no arquivo de Teste.

Nesse caso, acredito que funcione se você colocar a função "retornaFizz" na classe FizzBuzz.

<?php
class FizzBuzz {

    public $numero = null;

    public function __construct($numero = null) {
        $this->numero = $numero;
    }

    public function retornaFizz($numero){
        $fizz = 3;
        if ($numero % $fizz == 0){
            echo "Fizz";
        } else {
            echo "Sem essa de fizbuzz";
        }
    }
}

?>

Ai você chama ela no seu arquivo de teste:

$fizzbuzz = new FizzBuzz();
echo $fizbuzz -> retornaFizz(4);

Vê se funciona, qualquer coisa pode comentar aqui! :D

Eu fiz essa no arquivo teste

unction retornaFizz($numero) {
        $fizzbuzz = new FizzBuzz();
        echo $fizbuzz -> retornaFizz(3);
    }
}

Mais por exemplo como estamos fazendo Teste TDD eu posso usar o echo normalmente ? porque qdo rodar ele vai me apresentar um ponto ou OK

Em TDD não costuma se utilizar o echo, usa-se mais o return! :D

Na função que retorna "Sem essa de fizz buzz" eu precisava tirar isso e por exemplo retornar o numero inserido por exemplo Caso não for divisivel por ninguem retornar o numero que a pessoa digito. Dito 2 ele retorna 2 digito 3 ele retorna Fizz

public function retornaFizz($numero){
    $fizz = 3;
    if ($numero % $fizz == 0){
        echo "Fizz";
    } else {
        echo "Sem essa de fizbuzz";
    }
}

Olá, Victor. Tudo bem?

Sua dúvida está aqui há algum tempo, né!?

rsrsrs

Vamos lá...

Você tem uma classe e quer testá-la. Primeiro passo: Você precisa entender de orientação a objetos. Baseado nas suas dúvidas, acho que você poderia reforçar esse conhecimento aqui nos cursos da Alura.

Depois de ter solidificado os conceitos de OO, a gente pode voltar pros testes.

Sua classe de testes deve conter apenas código que testa outro, e não o código a ser testado.

Então, seu código ficaria mais ou menos assim:

<?php
class FizzBuzz
{
    public function retornaFizz(int $numero)
    {
        $fizz = 3;
        if ($numero % $fizz == 0) {
            return "Fizz";
        }
        return echo "Sem essa de fizbuzz";
    }
}

E seu código de teste:

require_once('fizzbuzz.php');

class FizzBuzzTest extends PHPUnit_Framework_TestCase
{
    public function testPassando3RetornaFizz($numero)
    {
        $fizz = new FizzBuzz();
        $this->assertEquals('Fizz', $fizz->retornaFizz(3));
    }

    public function testPassando2NaoRetornaFizz($numero)
    {
        $fizz = new FizzBuzz();
        $this->assertEquals('Sem essa de fizbuzz', $fizz->retornaFizz(3));
    }
}

Você pode implementar vários outros testes, mas isso já é um começo.

Para rodar este teste, execute phpunit arquivo-de-teste.php

Espero que tenha continuado seus estudos.

Forte abraço!

solução!

Olá Victor!

Conseguiu resolver a dúvida?