Mejor manera de afirmar los valores de retorno correctos en Groovy -- groovy campo con assertions camp codereview Relacionados El problema

Better way to assert correct return values in Groovy


5
vote

problema

Español

He escrito una función que me devuelve los duplicados de una lista:

  public String getFormattedId() {     return new StringBuilder()             .append(id.substring(0, 4))             .append(" ")             .append(id.substring(4, 8))             .append(" ")             .append(id.substring(8, 12))             .append(" ")             .append(id.substring(12, 16))             .append(" ")             .append(id.substring(16, 19))             .toString(); } 1  

La lista no puede tener el tamaño 1 porque si no se encuentran duplicados, debe estar vacío de lo contrario, si hay duplicados, debe ser de al menos 2 elementos.

Sin ese cheque, lo haría de esta manera sin tener que crear ninguna variable nuevas:

  public String getFormattedId() {     return new StringBuilder()             .append(id.substring(0, 4))             .append(" ")             .append(id.substring(4, 8))             .append(" ")             .append(id.substring(8, 12))             .append(" ")             .append(id.substring(12, 16))             .append(" ")             .append(id.substring(16, 19))             .toString(); } 2  

Cuando use afirmación, ¿existe alguna forma de evitar guardar el resultado en la variable 99887766655443313 y devolviéndolo al final?

Original en ingles

I have written a function that returns me the duplicates of a list:

static List<SomeClass> findDuplicateElements(List<SomeClass> myObjects) {     List<SomeClass> duplicates = myObjects     .groupBy { it.someAttribute }     .findAll { it.value.size() > 1 }     .collect { it.value }     .flatten()      assert duplicates.size() != 1     duplicates } 

The list cannot have the size 1 because if no duplicates are found it must be empty else if there are duplicates it must me at least 2 elements.

Without that check I would do it this way without having to create any new variables:

static List<SomeClass> findDuplicateElements(List<SomeClass> myObjects) {     myObjects     .groupBy { it.someAttribute }     .findAll { it.value.size() > 1 }     .collect { it.value }     .flatten() } 

When using assert, is there any way to avoid saving the result in the duplicates variable and returning it at the end?

     

Lista de respuestas

2
 
vote
vote
La mejor respuesta
 

Puede usarla with Para hacer las cosas en línea sin declarar otra variable:

  List list = [   [first: "foo", last: "bar"],   [first: "baz", last: "qux"],   [first: "baz", last: "bar"] ]  List findDuplicateElements(myObjects) {    myObjects    .groupBy { it.last }    .findAll { it.value.size() > 1 }    .collect { it.value }    .flatten()    .with {      assert it.size() != null      it    } }  assert findDuplicateElements(list).size() == 2   
 

You can use with to do things inline without declaring another variable:

List list = [   [first: "foo", last: "bar"],   [first: "baz", last: "qux"],   [first: "baz", last: "bar"] ]  List findDuplicateElements(myObjects) {    myObjects    .groupBy { it.last }    .findAll { it.value.size() > 1 }    .collect { it.value }    .flatten()    .with {      assert it.size() != null      it    } }  assert findDuplicateElements(list).size() == 2 
 
 

Relacionados problema

5  Pruebas de la unidad Constructores privados y constantes de Getter  ( Unit testing private constructors and getter setters ) 
Tengo una clase deltay8 , A Clase deltay9 y estoy tratando de escribir pruebas de unidad para sus constructores y constantes de Getter. Dirección: cen...

13  Compilación de formato de estilo de impresión de tiempo de compilación  ( Compile time printf style format checking ) 
inspirado en este boleto abierto en Boost, esto busca completar el trabajo allí. Dada una cadena de formato de estilo de impresión y argumentos asociados,...

2  Temporizador personalizado afirmando  ( Custom timer assert ) 
Me gustaría hacer una aserción personalizada para mi prueba de unidad, lo que mediría el tiempo de ejecución de dos funciones C # y las compararía. He escrito...

5  ¿Cuál podría ser otra forma de probar si INT tiene 32 bits de ancho en el tiempo de compilación?  ( What might be another way to test if int is 32 bits wide at compile time ) 
A continuación se muestra el código que se compilará cuando 9988776655544339 es igual a 2 32 . Generará un error de compilador cuando ||0 no es igual a 2...

4  NSASSERT o NSLOG en la caja del interruptor de los valores predeterminados  ( Nsassert or nslog in defaults switch case ) 
Me pregunto si debería usar NSLog(@"Switch out of range") o NSAssert(FALSE,@"Switch out of range"); en el siguiente ejemplo: typedef enum { kSectio...

-1  Método de prueba del ayudante para afirmar si se puede encontrar texto  ( Test helper method to assert if text could be found ) 
últimamente he estado recibiendo mucha crítica en las críticas de mi código en el trabajo, donde los comentarios típicos han sido que mis nombres de variables...

10  Ejecutar automáticamente a DetTest cada vez que se ejecuta todos los programas de tiempo  ( Automatically run doctest every time program is run ) 
Me gustaría que esto suceda cada vez que ejecuto un programa desde la línea de comandos. ¿Mi enfoque es Pythonic? Estoy interesado en saber si hay algún probl...

8  Vector de clases derivadas  ( Vector of derived classes ) 
Cada uno sabe que no puede poner un normalizeTme()3 en un normalizeTme()4 . Decidí implementar una colección que le permite hacer esto: normalizeTme()5 ...

0  MS falsifica cuñas. Assert "fue llamado" (por cierres)  ( Ms fakes shims assert was called by closures ) 
¿Es una buena o mala práctica para usar cierres para afirmar que el método se llamó de tal manera? El método establece un shim y devuelve una acción que cap...

5  Programación defensiva Tipo-Comprobación  ( Defensive programming type checking ) 
Tengo problemas con los idiomas tipificados dinámicamente, y tiendo a preocuparme por escribir mucho. DOMPY tiene un comportamiento diferente dependiendo de...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos