2010-06-18 24 views
6

Decir que tengo la claseassertRaises no se puede llamar

class myClass(object): 
    pname = "" 

    def __getName(self): 
     return pname 

    def __setName(self, newname): 
     if not isalpha(newname): 
     raise ValueError("Error") 
     elif 
     self.pname = newname 

    name = property(fget=__getName,fset=__setName) 

ya que estos métodos son privadas, y yo soy el acceso a pname a través del nombre, ¿Cómo se prueba con assertRaises cuando assertRaises sólo acepta un exigible por su prueba?

Respuesta

8

Haga su propio invocable.

class TestMyClass(unittest.TestCase): 
    def test_should_raise(self): 
     x = myClass() 
     def assign_bad_name(): 
      x.name = "7" 
     self.assertRaises(ValueError, assign_bad_name) 
0

¿Define su propia función?

class TestRaises(unittest.TestCase): 
    def test_setter(self): 
     def run_test(): 
      c = myClass() 
      c.name = 12 

     self.assertRaises(ValueError, run_test) 
4

Primero. No pierda el tiempo con métodos "privados" con __names.

Segundo. Hacer esto.

class TestMyClass(unittest.TestCase): 
    def setUp(self): 
     self.myclass= MyClass() 
    def test_setName_should_fail(self): 
     try: 
      self.myclass.name = 232 
      self.fail("Should have raised an exception") 
     except ValueError, e: 
      self.assertEquals("Error", e.msg) 
+0

1 para hacer comentarios sobre los métodos de "privado" . –

2

En Python 3 (y 2.7) se puede utilizar una construcción with:

class TestMyClass(unittest.TestCase): 
    def test_should_raise(self): 
     x = myClass() 
     with self.assertRaises(ValueError): 
      x.name = "7" 

Este es el código eran empieza a tener hermosa ...

Cuestiones relacionadas