#VS2015 – C# 6, nameof operator to get variables, types or members names

Hola!

Sometime ago I wrote about the new feature in C# 6 which allow us to use String Interpolation instead of String.Format(). In C# 6 we also found a new cool operator: nameof. This new operator allows us to get in string the name of a variable, or a type or a member. If you think in exception handling scenarios or dynamic generation this is very useful.

So, let’s see this in action, with a sample console Project and a custom class.

In the Console Main(), the program Display the name of a couple of variables and also the name of a couple of operations (custom and system). The console Output is this one

References

– El Bruno, String Interpolation http://elbruno.com/2015/04/20/vs2015-string-interpolation-vs-string-format-your-team-will-love-you/

– MSDN nameof, https://msdn.microsoft.com/en-us/library/dn986596.aspx

Saludos @ Madrid

/El Bruno

#VS2015 – C# 6, nameOf para obtener el nombre de una variable, operacion o tipo

Hola!

Hace un tiempo escribe sobre lo interesante que es poder utilizar String Interpolation en lugar de String.Format() cuando trabajamos con string. Otra de las novedades interesantes de C# 6.0 es el operador nameof. El mismo nos permite obtener de forma rápida el nombre de una variable u operación. En escenarios de trazas, de proceso de errores, o de generación dinámica de código es realmente útil.

Veamos un ejemplo para entenderlo mejor. Partimos sobre el siguiente código que define una clase custom con un par propiedades y una operación.

Luego en el proceso de la Console, vemos como se obtienen los nombres de las variables, de las propiedades de la variable y además de operaciones. El output de la consola es el siguiente

References

– El Bruno, String Interpolation http://elbruno.com/2015/04/20/vs2015-string-interpolation-vs-string-format-o-como-arruinarle-el-dia-a-tu-equipo/

– MSDN nameof, https://msdn.microsoft.com/en-us/library/dn986596.aspx

Saludos @ Madrid

/El Bruno

#VS2015 – IntelliTests a cool tool to test legacy code

Hola!

If you work with legacy apps, you probably know the hard work needed to create a test Environment this this type of apps. In the most simple scenario, you start writing some code and you need some tests to validate you don’t get into any ugly errors. The main issue, is that you are not allowed to make changes in this apps, so you must cry a couple of days and then, men up and go back to work. (It also applies to crappy code, not only to legacy apps)

So, back in 2010 Microsoft Research present us PEX , nowadays this auto-test feature is part of Visual Studio 2015 and is named “IntelliTests”. This tool perform an automatic code analysis and then generates tests based on this analysis.

Let´s start with a simple based on crappy code, in example the leap motion USB missile launcher app I use in my demos.

There is a complex operation which converts the movement of the hand detected by the leap into a simple constant, so let’s open the context menu ans select “Create IntelliTest

If we don’t have any test Project in our Solution, IntelliTest will suggest us the creation of a new one.

When we have the test Project we realize that the test class is almost empty. IntelliTest is smart enough to create this tests and also later generate the simple data to run this tests. To run a test, let’s open the context menu and select “Run IntelliTest”. Now we can see the total amount of runs and different tests auto generated for the operation.

For this sample, IntelliTest generates 39 different tests with all the needed parameter combinations for GetDirection(). Now is important to remember:

If we change the code of the operation and we run again the option “Run IntelliTest” the tests data set will be generated again based on the new code of the operation.

If our main objective is to have some regression tests, we must SAVE the current set of data sets. Based on the generated tests we can save all the tests, or a subset of tests.

When we save, IntelliTest will generate a new class which can be used for the regression tests. We can also add our own asumptions or assertions which is something very cool to extend the tests. IntelliTest will also provide us some helpers like the creation of a Factory, and other scenarios to make them very powerful.

References

– El Bruno, Pex for Fun http://geeks.ms/blogs/elbruno/archive/2010/08/20/vs2010-pex-for-fun-ideal-para-ver-quien-paga-las-cervezas.aspx

– MSDN IntelliTest, https://msdn.microsoft.com/library/dn823749(v=vs.140).aspx

Saludos @ Barcelona

/El Bruno

#VS2015 – IntelliTests una interesante forma de testear codigo Legacy

Hola!

Una de los Dolores de cabeza más comunes cuando trabajas con apps legacy, es la incapacidad de poder aplicar un buen esquema de tests. Usualmente esto es necesario cuando queremos validar que las modificaciones que realizamos no “revienten” las Features actuales de las apps. Ojo, esto no solo es aplicable a apps legacy, también aplica cuando te toca enfrentarte a ese montón de source code que parece que se hubiese programado con los pies.

Pues bien, lo que hace unos años comenzó como PEX allá por el 2010 hoy es parte de Visual Studio 2015 y se conoce como “IntelliTests”. Esta herramienta analiza nuestro código y crea una suite de tests. Veamos un ejemplo, utilizando las clases que uso para controlar el lanza misiles con un Leap Motion.

Sobre una operación compleja que analiza la posición de la mano sobre el LeapMotion, desplegamos el menú contextual y seleccionamos la opción “Create IntelliTest

Si no tenemos un Proyecto de test en nuestra solución, IntelliTest nos propondrá una serie de opciones para crear un nuevo proyecto.

Ahora bien, una vez creados estos artefactos veremos que la clase creada está vacia. Esto es porque IntelliTest genera automáticamente una serie de tests sobre la base del código que está analizando en cada ejecución. Veamos un ejemplo, lanzamos el menú contextual y seleccionando la opción “Run IntelliTest

La generación automática ha generado 39 diferentes tests para probar las combinaciones de código que pueden afectar a la operación GetDirection(). Esta es la parte importante:

Si modificamos el código de la operación y lanzamos nuevamente la opción “Run IntelliTest” los tests se generarán nuevamente.

Si queremos tener un grupos de tests, con los que realizar pruebas de regresión, lo que debemos hacer es seleccionar la opción “Save” en el panel de IntelliTest. Aquí tenemos la opción de guardar todos los tests, o seleccionar un subset de los mismos y guardar este subset.

Pues bien, la clase generada contiene una visión estática de tests que podemos utilizar como pruebas de regresión. También es importante saber que podemos agregar nuestras propias asumptions o assertions en los tests generados. Aunque personalmente no sería partidario de modificarlos mucho, si es necesario meterles muchos cambios lo mejor será generar nuestros propios tests. IntelliTest también nos ayuda con un sistema de warnings para casos donde es necesario la creación una Factory por ejemplo.

References

– El Bruno, Pex for Fun http://geeks.ms/blogs/elbruno/archive/2010/08/20/vs2010-pex-for-fun-ideal-para-ver-quien-paga-las-cervezas.aspx

– MSDN IntelliTest, https://msdn.microsoft.com/library/dn823749(v=vs.140).aspx

Saludos @ Madrid

/El Bruno

#HUMOR – How cool is Code Map in #VS2015, shut up and Refactoring !!!

Hola!

Version en inglés y español de la misma respuesta a una conversación que mantuve esta semana.

References

– Channel9 Understating Complex Code with Code Map https://channel9.msdn.com/Series/Visual-Studio-2012-Premium-and-Ultimate-Overview/Visual-Studio-Ultimate-2012-Understanding-complex-code-with-Code-Map-ENU

– Visual Studio Gallery, VS10x Code Map https://visualstudiogallery.msdn.microsoft.com/1c54d1bd-d898-4705-903f-fa4a319b50f2

– MSDN Use code maps to debug your applications https://msdn.microsoft.com/en-us/library/jj739835.aspx?f=255&MSPPError=-2147217396

Saludos @ Madrid

/El Bruno

#VS2015 – Removing code comments with a single click

Hola!

As you probably know, I’m not a big fan of code Comments. I mean, sometimes 2 lines of text are very useful to give some context, however I try to avoid them as much as I can. The next comments is mostly boring and doesn’t add any value to my code

IMHO I don’t like them because they use “Reading Space” in the source code editor. My good friend Victor, sometime ago suggest me to use the keyboard combination CTRL+M, CTRL+O to collapse the Comments section and that’s a cool one. In member comments it will work similar to the next image

However, you may still find some very unusual Comments inside the code. To avoid this one, I found an extension today which automatically remove this lines in single line mode and multiple line mode. And is also very cool, because uses the new features in VS2015 IDE and you can preview the changes

So, I get an smile thank to this one today .. at the end I find myself and the code and that’s great .

Important: If you are working under a some strange rule where member Comments are a #musthave, tools like GhostDoc can help you a lot., More than 8 years from since I wrote this post.

References

– El Bruno, Visual Studio AddIns: GhostDoc http://geeks.ms/blogs/elbruno/archive/2007/03/07/visual-studio-addins-ghostdoc.aspx

– Visual Studio Gallery, Comments Remover https://visualstudiogallery.msdn.microsoft.com/77e5af13-e4b3-4cb9-8c44-e7cd645a0c33

Saludos @ Madrid

/El Bruno

#VS2015 – Eliminando comentarios en source files en un solo clic

Hola!

Como muchos saben, no soy muy amigo de los comentarios en el código. Si bien es cierto que 2 líneas de texto pueden agregar mucho contexto útil, siempre trato de evitarlos.

Veamos el siguiente ejemplo de un comentario en una funci’on que no aporta absolutamente nada

Personalmente los comentarios me quitan “espacio de lectura” dentro del editor de código. El amigo Victor, hace un tiempo me sugería la combinación CTRL+M, CTRL+O para colapsar todos los comentarios de miembros en el editor de código. Es una buena sugerencia, el ejemplo anterior quedaría de la siguiente manera:

Sin embargo, es probable que dentro del código y fuera de los comentarios de la firma de una función, sigan existiendo comentarios que no aporta nada. En esos casos, pues mejor borrarlos. Hoy he encontrado una extensión para Visual Studio 2015 que nos permite eliminar los comentarios de un archivo, sean single line o multiple line. Al estar integrado en el modelo de acciones nuevas del IDE de VS2015, tenemos también la posibilidad de tener un Preview de los cambios en el archivo

Mira, me ha sacado una sonrisa esta extensión hoy .. me he encontrado solo con código y la verdad es que se agradece.

Importante: Cuando debes cumplir normativas de documentación que obligan a tener comentarios, herramientas como GhostDoc suelen ser muy útiles para automatizar esto último. Y por cierto, ya hace más de 8 añazos de este post.

References

– El Bruno, Visual Studio AddIns: GhostDoc http://geeks.ms/blogs/elbruno/archive/2007/03/07/visual-studio-addins-ghostdoc.aspx

– Visual Studio Gallery, Comments Remover https://visualstudiogallery.msdn.microsoft.com/77e5af13-e4b3-4cb9-8c44-e7cd645a0c33

Saludos @ Madrid

/El Bruno