Error performing @pytest.mark.parametrize

Asked

Viewed 91 times

0

Where am I going wrong?

Bhaskara.py

import math

class Bhaskara:

    def delta(self, a, b, c):
        return b**2 -4*a*c

    def main(self):
        a_digitado =float(input())
        b_digitado =float(input())
        c_digitado =float(input())
        print(self.calcula_raizes(a_digitado, b_digitado, c_digitado))

    def calcula_raizes(self, a, b, c):
            d = self.delta(a, b, c)
            if d==0:
                raiz1=(-b + math.sqrt(d))/(2*a)
                return 1, raiz1
            else:
                if d<0:
                    return 0
                else:
                    raiz1=(-b + math.sqrt(d))/(2*a)
                    raiz2=(-b - math.sqrt(d))/(2*a)
                    return 2, raiz1, raiz2

test_Bhaskara.py file

import Bhaskara     
import pytest

class Testbaskara:

    @pytest.mark.parametrize('entrada, esperado', [
        [(1, 0, 0,), (1, 0,)],
    ])
    def test_Bhaskara(entrada, esperado):
        b = Bhaskara.Bhaskara()
        assert b.calcula_raizes(entrada) == (esperado)

Exit:

============================= test session starts ============================== 
platform linux2 -- Python 2.7.15rc1, pytest-3.3.2, py-1.5.2, pluggy-0.6.0 rootdir: /home/danlawand/Python, inifile: collected 0 items / 1 errors   

==================================ERRORS================================

[appears other several comments]

And

Valueerror: uses in argument 'input'

2 answers

0

RESOLVED:

import math

class Bhaskara:

    def delta(self, a, b, c):
        return b**2 -4*a*c

    def main(self):
        a_digitado =float(input())
        b_digitado =float(input())
        c_digitado =float(input())
        print(self.calcula_raizes(a_digitado, b_digitado, c_digitado))

    def calcula_raizes(self, a, b, c):
            d = self.delta(a, b, c)
            if d==0:
                raiz1=(-b + math.sqrt(d))/(2*a)
                return [1, raiz1]
            else:
                if d<0:
                    return [0]
                else:
                    raiz1=(-b + math.sqrt(d))/(2*a)
                    raiz2=(-b - math.sqrt(d))/(2*a)
                    return [2, raiz1, raiz2]
  • return return lists.
import Bhaskara     
import pytest

class Testbaskara:

    @pytest.fixture
    def b(self):
        return Bhaskara.Bhaskara()

    @pytest.mark.parametrize("entrada, esperado", [
        ([1, 0, 0], [1, 0]),
        ([1, -5, 6], [2, 3, 2]),
        ([10, 10, 10], [0]),
        ([10, 20, 10], [1, -1])
        ])

    def test_bhaskara(self, b, entrada, esperado):
        assert b.calcula_raizes(entrada[0], entrada[1], entrada[2]) == (esperado)
  • Correct configuration for arguments of @pytest.mark.parametrize is: ([1, 0, 0], [1, 0]),

  • test_bhaskara receives self

  • calcula_raizes takes each element of the list as argument:

b.calcula_raizes(entrada[0], entrada[1], entrada[2])

0

In your case, it would also work with tuple if you did the so:

import Bhaskara     
import pytest

class Testbaskara:

## Opcional caso queira não atribuir o valor ao b no test_Bhaskara e assim não ficando repetitivo em proximos testes em outros módulos
##    @pytest.fixture
##    def b(self):
##        return Bhaskara.Bhaskara()
    
    @pytest.mark.parametrize('entrada, esperado', [
        [(1, 0, 0,), (1, 0,)]
        ])

    def test_Bhaskara(self, entrada, esperado): ## no seu caso aqui faltou o self
                                                ##se for colcoar Opcional, não esqueça de inclir o b ficando assim a função def
                                                ## test_Bhaskara(self, b, entrada, esperado)
        b = Bhaskara.Bhaskara()  ## se for colcoar Opcional, não esqueça de apagar essa linha ou comentar ela
        assert b.calcula_raizes(entrada[0], entrada[1], entrada[2]) == (esperado) ## aqui faltou atribuir a tupla os valores esperados de entrada[0], [1] e [2]

Browser other questions tagged

You are not signed in. Login or sign up in order to post.