Listar la igualdad de miembros en FsUnit
Frecuentes
Visto 494 veces
1
Quiero verificar que dos listas tengan los mismos miembros, independientemente del orden:
let memCount items = items |> Seq.countBy id |> Map.ofSeq
let memberEquals items1 items2 = memCount items1 = memCount items2
Actualmente, uso esto en una prueba de la siguiente manera:
memberEquals expected actual |> should be True
Sin embargo, esto no es tan agradable para el informe de errores.
¿Puedo extender FsUnit para agregar un memberEquals
similar a equals
or contains
? Alternativamente, siempre podría ordenar las listas antes de compararlas. ¿Cuál es el mejor enfoque aquí?
(Estoy usando FsUnit con nUnit, por lo que vale).
1 Respuestas
5
Tus memberEquals
La función no comprueba si las listas tienen los mismos miembros (solo el mismo número de elementos). La forma más fácil de hacerlo es:
let memberEquals items1 items2 = (set items1 = set items2)
Si las listas pueden contener duplicados, deberá ordenarlas y compararlas como listas.
† Puedes leer sobre el set
funcionar en MSDN.
Respondido el 12 de junio de 12 a las 20:06
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas unit-testing f# fsunit or haz tu propia pregunta.
Es en este tipo de escenarios no triviales donde verá que Unquote realmente comienza a brillar, simplemente porque el propio F# es excelente para expresar este tipo de afirmaciones. Ver gist.github.com/2919920. - Stephen Swensen