¿Cómo se crean pruebas unitarias en F #? Normalmente utilizo la porción UnitTest de Visual Studio con los atributos [TestClass] y [TestMethod] y uso la Vista de prueba para ejecutarlos. Sé que puedo crear un archivo de script y ejecutar estos, pero me gusta la forma en que se maneja actualmente.¿Cómo se manejan las pruebas unitarias en F #?
Respuesta
prefiero usar FsUnit o FsTest para escribir pruebas en F #, se siente más natural que las pruebas de estilo OO xUnit.
EDIT 2014: Ahora considero que FsUnit/FsTest es azúcar de sintaxis principalmente inútil. Y "más natural que OO" no significa absolutamente nada. Hace unos meses escribí mis pensamientos actuales sobre las pruebas here (recomiendo leer todo el hilo).
Consulte fscheck. Es un puerto de Haskell's Quickcheck. Fscheck le permite especificar las propiedades que debe cumplir una función que luego verificará frente a una "gran cantidad de casos generados aleatoriamente".
Es algo que no se puede hacer fácilmente con un lenguaje imperativo como C#.
Eche un vistazo a Pex: http://research.microsoft.com/en-us/projects/Pex/ –
@Mauricio: Estoy de acuerdo en que es posible hacer lo que hace FsCheck (generar casos de prueba de forma aleatoria) en una configuración de OO (otro ejemplo: RANDOOP). Tal vez algún día tengamos un lenguaje de especificación (que se ve mucho mejor en una configuración funcional en mi opinión muy sesgada) que puede generar casos generados aleatoriamente y cubrir casos como Pex. –
Ahora FsCheck tiene una interfaz C# para que pueda usar las funciones más importantes de FsCheck en C# también. –
Trate XUnit.net
De acuerdo. (¿solo?) xUnit.NET puede ejecutar casos de prueba en métodos estáticos, por lo que si desea permanecer en los marcos de prueba de la unidad .NET comunes, es el que menos esfuerzo requiere. –
MbUnit puede hacer esto también –
A partir de la versión 2.5, NUnit le permite usar static members as tests. Además, el TestFixtureAttribute de nivel de clase es only necessary for generic or classes with non-default constructors. NUnit también tiene un backward-compatible convention que un miembro de prueba puede comenzar con la palabra "prueba" en lugar de usar TestAttribute, por lo que casi puede escribir F # idiomático con NUnit> 2.5.
actualización Se puede ver algunos ejemplos de prueba sin el TestFixtureAttribute en el Cashel library. Continué usando TestAttribute ya que parece que pocos corredores de prueba recogen las pruebas correctamente cuando no están presentes, por lo que parte de la publicación de NUnit puede ser incorrecta o al menos engañosa.
Ryan, ¿le gustaría elaborar con un ejemplo de prueba en F #? ¿O un enlace a un sitio que muestra las pruebas de unidad F # sin TestAttribute o TestFixtureAtrribute? –
@David He agregado un enlace a mis pruebas para Cashel. –
Es posible que desee intentar NaturalSpec. Es un F-UnitTest-Framework además de NUnit.
que utilizan una combinación de xUnit.net, TestDriven.Net (Visual Studio Add-in para la ejecución de pruebas, libre para "estudiantes, desarrolladores de código abierto y los usuarios de ensayo"), y la biblioteca de mi propia fuente abierta Unquote (que también trabaja con NUnit y cualquier otro marco de aserciones basado en excepciones). Esto ha funcionado muy bien y empezar es muy fácil:
- Descargar e instalar TestDriven.Net
- Descargar xUnit.net, descomprimir a cualquier lugar y ejecutar xunit.installer.exe para integrarse con TestDriven.Net
- Descargar Fin de la cita, descomprima en cualquier lugar
- Crear un proyecto dentro de su solución para pruebas unitarias
- agregar referencias a xunit.dll y Unquote.dll (de descargas descomprimidos) en su proyecto de prueba de unidad
El siguiente es un ejemplo simple de un archivo .fs en el proyecto de prueba de unidad que contiene pruebas de unidad de estilo xUnit.net/Unquote.
module Tests open Swensen.Unquote open Xunit [<Fact>] let ``description of first unit test``() = test <@ (11 + 3)/2 = String.length ("hello world".Substring(4, 5)) @> [<Fact>] let ``description of second unit test``() = let x = List.rev [1;2;3;4] x =? [4;3;1;2]
ejecutar todas las pruebas unitarias en el proyecto haciendo clic derecho en el proyecto en el explorador de soluciones y selección de prueba (s) Ejecutar.Tanto de las pruebas ejemplo anterior fallará con el siguiente impreso a la ventana de Visual Studio Output:
------ Test started: Assembly: Tests.dll ------ Test 'Tests.description of second unit test' failed: [4; 3; 2; 1] = [4; 3; 1; 2] false C:\Solution\Project\Tests.fs(12,0): at Tests.description of second unit test() Test 'Tests.description of first unit test' failed: (11 + 3)/2 = String.length ("hello world".Substring(4, 5)) 14/2 = String.length "o wor" 7 = 5 false C:\Solution\Project\Tests.fs(7,0): at Tests.description of first unit test() 0 passed, 2 failed, 0 skipped, took 1.09 seconds (xUnit.net 1.7.0 build 1540).
En VS2013 puede utilizar el siguiente.
open Microsoft.VisualStudio.TestTools.UnitTesting
[<TestClass>]
type testrun() =
[<TestInitialize>]
member x.setup() =
//your setup code
[<TestMethod>]
member x.yourTestName() =
//your test code
Sugerencia: Si está buscando pruebas de unidad de interfaz de usuario, puede utilizar esta configuración con Canopy.
Esta debería ser la respuesta aceptada. Esto usa la funcionalidad de prueba unitaria incorporada. Además (y no obviamente), este enfoque requiere agregar una referencia a Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll. – wizulus
@alancnet solo está incorporado si está usando Visual Studio. – Yawar
- 1. F # desarrollo y pruebas unitarias?
- 2. ¿Cómo escribo las pruebas unitarias en PHP?
- 3. ¿Cómo se ejecutan las pruebas unitarias en modo STAThread?
- 4. ¿Cómo se organizan las pruebas unitarias en paquetes?
- 5. ¿Qué pruebas con las pruebas unitarias?
- 6. Cuándo usar las pruebas unitarias?
- 7. ¿Cómo se separan las pruebas unitarias de las pruebas de integración en Visual Studio?
- 8. ¿Cómo deberían documentarse las pruebas unitarias?
- 9. Pruebas unitarias en CakePHP?
- 10. pruebas unitarias con las dependencias entre las pruebas
- 11. Pruebas unitarias: cómo hacerlo?
- 12. Pruebas unitarias: ¿codificación en las interfaces?
- 13. ¿Cómo se manejan las cadenas en C++?
- 14. ¿Cómo se manejan las interrupciones en SMP?
- 15. ¿Cómo deshabilitar las traducciones durante las pruebas unitarias en django?
- 16. Pruebas unitarias en C++
- 17. Pruebas unitarias ... cómo mejorarlo
- 18. Pruebas unitarias en C++
- 19. ¿Cómo funcionan las pruebas unitarias en el iPhone?
- 20. ¿Deberían todas las pruebas unitarias ser exitosas?
- 21. ¿Cómo simular lanzando una excepción en las pruebas unitarias?
- 22. Pruebas unitarias en QTestLib - ejecución de pruebas individuales/pruebas en clase/todas las pruebas
- 23. ¿Cómo se manejan las pruebas de unidad/regresión que se espera que fallen durante el desarrollo?
- 24. ¿Se recomienda establecer Ember.testing = true para las pruebas unitarias?
- 25. ¿Cómo se manejan las funciones cpp?
- 26. ¿Pruebas unitarias o pruebas funcionales?
- 27. ¿Las pruebas unitarias usan el registro?
- 28. ¿Qué componentes de Delphi se envían con las pruebas unitarias?
- 29. No se pueden depurar las pruebas unitarias con resharper testrunner
- 30. Explique las pruebas unitarias por favor
[Este reciente artículo mío] (http://fsharpnews.blogspot.com/2011/01/testing-behaviour-driven-development.html) describió esto y mucho más (pruebas BDD de F #). –
Aquí hay un lugar para comenzar: http://bit.ly/1JhEbA7 –