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

Como mockar um método que tem o random?

Tenho que testar uma classe com o TDD e dentro da classe eu utilizei o Math.random() para gerar número aleatório. Agora que estou testando a classe e estou com dificuldade em saber o que fazer. Alguém pode me ajudar?

public class Guerreiro extends Personagem{
    private List<String> habilidade = new ArrayList<>();

    public List<String> getHabilidade() {
        return habilidade;
    }

    public void setHabilidade(List<String> habilidade) {
        this.habilidade = habilidade;
    }

     public void attack(){
        int minimoValor = 0;
        int maximoValor = 300;
        double ataqueGuerreiro = ((super.getForca() + super.getLevel()) + (Math.random() * (maximoValor - minimoValor)));
        System.out.println("Ataque do Guerreiro é de: " + ataqueGuerreiro);

    }

Agora a classe GuerreiroTest:

public class GuerreiroTest {

    @Mock
    private Math math;
    @InjectMocks
    private Guerreiro guerreiro;
    private final ByteArrayOutputStream outContent = new ByteArrayOutputStream();


    @Before
    public void setUp(){
        guerreiro = new Guerreiro();
        System.setOut(new PrintStream(outContent));
    }

    @After
    public void tearDown() throws IOException {
        outContent.close();
    }

     @Test
    public void testarAtackDoGuerreiroUsandoAForcaEOLEvelEGerandoUmValorAleatorioDeZeroATrezentos(){
        guerreiro.setForca(56);
        guerreiro.getForca();
        guerreiro.setLevel(1);
        guerreiro.getLevel();
        //Mockito.when().thenReturn(50.0);
        guerreiro.attack();
        assertEquals(107, 107);
    }
2 respostas
solução!

Oi Samantha,

O foco do teste deve ser no comportamento esperado do seu método. Você deve pensar "qual o propósito do método attack?" e testar as possibilidades de retorno dele, para garantir que ele está executando o comportamento da maneira esperada.

Se o objetivo desse método é apenas retornar um número aleatório, então não é recomendado você escrever testes, pois você estaria testando se o Java(classe Math) está gerando números aleatórios corretamente.

Muito obrigada Rodrigo, vou tentar isolar a expressão em uma variável e testar assim.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software