c# - unitarias - pruebas visual studio 2017
IronPython para pruebas unitarias sobre C# (8)
Existe una desventaja obvia: todos los que trabajan en el código deben ser competentes en dos idiomas, no solo en uno. Soy bastante peludo pero no muy puntiagudo, pero entiendo por qué los gerentes pueden ser escépticos.
Sabemos que Python proporciona mucha productividad sobre cualquier lengua compilada. Tenemos programación en C # y necesitamos escribir los casos de prueba unitarios en C #. Si vemos que la cantidad de código que escribimos para la prueba unitaria es aproximadamente diez veces más que el código original.
¿Es una opción ideal escribir casos de prueba unitaria en IronPython en lugar de C #? ¿Algún cuerpo ha hecho así? Escribí algunos casos de prueba, parecen ser buenos. Pero los administradores peludos puntiagudos no aceptarán.
La respuesta de Will es buena: está introduciendo un nuevo requisito para los desarrolladores.
Además, ¿cómo es el soporte de herramientas? No he probado nada de esto, pero me gustaría saber:
- ¿Qué tan fácil es depurar en pruebas de unidades fallidas?
- ¿Qué tan fácil es ejecutar pruebas unitarias desde el IDE? (por ejemplo, con ReSharper)
- ¿Qué tan fácil es automatizar las pruebas unitarias desde un servidor de compilación continuo?
Puede ser que todo esto esté bien, pero debe verificarlos y documentar los resultados.
Hay otras opciones además de IronPython, por supuesto, Boo es una opción bastante obvia.
Muy interesante.
¿Qué pasaría si escribes todo tu código con IronPython (no solo las pruebas unitarias)? ¿Acabarías con aproximadamente 10 veces menos código?
Quizás debería aprender IronPython también.
Python es un lenguaje mucho menos detallado que C # en realidad podría reducir la barrera para escribir pruebas de unidad, ya que todavía hay muchos desarrolladores que son resistentes a hacer pruebas unitarias automatizadas en general. Introducirlas y hacer que usen un lenguaje como IronPython que generalmente toma menos tiempo para escribir el código equivalente en C # podría animar a que se escriban más pruebas unitarias, lo que siempre es bueno.
Además, al usar IronPython para su código de prueba, puede terminar con menos líneas de código (LOC) para el proyecto, lo que significa que es más probable que las pruebas de la unidad se mantengan a largo plazo en lugar de ignorarlas o descartarlas.
En realidad, las pruebas son una gran oportunidad para tratar de integrar un nuevo idioma. Los lenguajes como Python brillan especialmente bien en las pruebas, y es un proyecto de bajo riesgo para probar; el peor de los casos no es para nada malo.
En cuanto a la experiencia de probar otro idioma en Python, he probado sistemas C y C ++ como este y fue excelente. Creo que definitivamente vale la pena intentarlo.
Sin embargo, lo que Jon dice es cierto: el nivel de herramientas para Python en general, e IronPython en particular, no se acerca al de C #. Cuánto te afecta es algo que descubrirás en tu piloto.
Python es excelente para el código UnitTesting C #. Nuestra aplicación es 75% en Python y 25% C # (Python.Net), y nuestras pruebas unitarias son 100% python.
Encuentro que es mucho más fácil usar trozos y burlas en Python, que es probablemente uno de los componentes más importantes que permite escribir pruebas de unidad efectivas.
Tengo que irme con Will y Jon ...
Preferiría que mis pruebas estuvieran en el mismo idioma que el código que estoy probando; Causa menos cambios de contexto cognitivo. Pero tal vez no soy tan mentalmente ágil como una vez fui.
- Jon
Recientemente he estado reevaluando mis actitudes de prueba después de descubrir las pruebas parametrizadas en mbUnit y NUnit . Anteriormente, recomendé Python unittest como una forma de automatizar cualquier prueba posible, debido a la naturaleza concisa y la capacidad de descubrimiento de las pruebas.
Las pruebas parametrizadas le permiten personalizar los dispositivos de prueba con un rango de parámetros de datos y, por lo tanto, sus pruebas de C # pueden llegar a ser incluso más concisas que las pruebas de Python.
[TestCase(12, 3, 4)]
[TestCase(12, 2, 6)]
[TestCase(12, 4, 3)]
[TestCase(12, 0, 0, ExpectedException = typeof(System.DivideByZeroException),
TestName = “DivisionByZeroThrowsExceptionType”)]
[TestCase(12, 0, 0, ExpectedExceptionName = “System.DivideByZeroException”,
TestName = “DivisionByZeroThrowsNamedException”)]
public void IntegerDivisionWithResultPassedToTest(int n, int d, int q)
{
Assert.AreEqual(q, n / d);
}