Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Que fallen los tests sin assert #1939

Closed
PalumboN opened this issue Sep 9, 2020 · 15 comments
Closed

Que fallen los tests sin assert #1939

PalumboN opened this issue Sep 9, 2020 · 15 comments
Assignees
Labels
component: tests type: Needs Discussion Please detail expected behavior & examples

Comments

@PalumboN
Copy link
Contributor

PalumboN commented Sep 9, 2020

Actualmente ya tenemos un warning cuando no se le manda ningún mensaje al objeto assert dentro de un test.

Me gustaría que además el test fallara (amarillo) diciendo que no se assertó nada.

image


EDIT:

@PalumboN PalumboN added type: Needs Discussion Please detail expected behavior & examples component: tests labels Sep 9, 2020
@mmatos
Copy link
Contributor

mmatos commented Sep 26, 2020

Acabo de crear un issue que podría ser relevante a la hora de considerar este que me parece más interesante: #1943

@PalumboN
Copy link
Contributor Author

@asanzo el otro día mostró en clase un uso de testing donde en este caso se espera que el test pase (comportamiento actual, el de la imagen) que me hizo dudar de mi propuesta.

@asanzo
Copy link

asanzo commented Sep 28, 2020

Estoy de acuerdo con @mmatos de que ese chequeo debería considerar los métodos de los tests, pero como dice @PalumboN me parece que lo que necesitamos es unassert.everythingWentFine() o similar. Paso a explicar un ejemplo similar al que vimos en clase:

Me explico: vos esperás hacer 4 tests con un método cuenta1.transferir(1000,cuenta2)

  • "Al transferir desde una cuenta sin guita explota"
  • "Al transferir desde una cuenta la cuenta origen queda con menos guita"
  • "al transferir hacia una cuenta la cuenta destino queda con más guita".
  • "Al transferir desde una cuenta con guita no debería explotar" <- este test es distinto de los 3 anteriores, y si bien está cubierto en los dos anteriores, es didácticamente interesante poderlo hacer. Y estaría bueno tener un assert que me deje ser declarativo al respecto. ¿Quizás un assert.doesNotThrowException({cuenta1.transferir(1000,cuenta2)}) es más declarativo?

Como dice el rasta, creo que para poder implementar el "que fallen los tests sin assert" necesitamos considerar casos como este.

@matifreyre
Copy link
Collaborator

matifreyre commented Sep 29, 2020 via email

@mmatos
Copy link
Contributor

mmatos commented Sep 29, 2020

Es necesario si mostrás self.error("..") y todavía no hablaste de try/catch.

+1 a tener un assertion como el que propone Alf (similar al expect { }.not_to raise_error de RSpec)

@matifreyre
Copy link
Collaborator

matifreyre commented Sep 29, 2020 via email

@asanzo
Copy link

asanzo commented Sep 29, 2020 via email

@asanzo
Copy link

asanzo commented Oct 27, 2020

Volviendo a ver esto, me gusta un poco menos la propuesta de @matifreyre .

Me gusta más esto:

test "Al transferir desde una cuenta con guita no debería explotar" {
     assert.doesNotThrowError({cuentaConGuita.transferirA(cuentaSinGuita, 1000)})
}

que esto:

test "Al transferir desde una cuenta con guita no debería explotar" {
     cuentaConGuita.transferirA(cuentaSinGuita, 1000)
     assert.success()
}

El primero me parece más declarativo, y tiene una sintaxis parecida a la familia assert.throwsError, mientras que el segundo requiere hacer el paso de entender que success en realidad está ahí porque si llega ahí es porque no explotó....

@fdodino
Copy link
Collaborator

fdodino commented Nov 15, 2020

A mí me resulta simpático doesNotThrowError, se puede implementar en Wollok mismo, en cuyo caso lo podemos mover a wollok-language y sería un PR fantástico para hacer, guiño guiño...

@asanzo @mmatos @matifreyre @PalumboN , si me dan el ok lo paso a wollok-language...

@PalumboN
Copy link
Contributor Author

+1000 al doesNotThrowError

Pero lo llamaría notThrowsException porque consistencia con los métodos que ya tenemos > consistencia con el inglés 👀

@npasserini
Copy link
Member

Por favor no pongamos cosas mal escritas en inglés. doesNotThrowExceptiondebería ser good enough.

@asanzo
Copy link

asanzo commented Nov 22, 2020

  1. ¿Qué les va más?
// Opción A
cuenta1.transferir(1000,cuenta2)
assert.doesNotThrowException()
// Opción B
assert.doesNotThrowException({cuenta1.transferir(1000,cuenta2)})
  1. Segunda pregunta: ¿Entonces agregamos también la propuesta de rasta que el test de amarillo?

@tesonep
Copy link
Contributor

tesonep commented Nov 22, 2020

B

@fdodino
Copy link
Collaborator

fdodino commented Nov 23, 2020

Opción B y sí. +1 a crear el doesNotThrowException en un issue de wollok-language y apuntarlo desde acá

@asanzo
Copy link

asanzo commented Nov 23, 2020

Charlamos en la meet de hoy que queda la opción B, y se implementa en este issue: uqbar-project/wollok-language#82

Este issue queda para lo que originalmente propuso @PalumboN (que el test runner dé amarillo al correr un test sin asserts), ahí edité el comment ppal agregando las dependencias que habría que resolver antes que este.

@fdodino decime si quedaron los issues suficientemente claros como querías, y también porfa péguenle una revisada a las dependencias quienes estuvimos discutiendo acá (especialmente @mmatos que no estuvo en la meet de hoy)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
component: tests type: Needs Discussion Please detail expected behavior & examples
Projects
None yet
Development

No branches or pull requests

7 participants