Setting up MSBuild with NUnit, NCover and NCoverExpxlorer

1. Introduction

The following guide will help you to create and execute an MSBuild configuration that will run tests with NUnit and also provide a NCover coverage report. The most challenging part was working with the free community edition for the tools, .NET 4.0, and also setting up the environment on a Windows 7 64 bit laptop.

2. Getting the right tools and know them

We need to download the right tools at the right version, I will provide a brief description of each

NUnit (2.6.0.12051)

This tool will help us to run our unit tests. You can download it from here: http://nunit.org/index.php?p=download. If you go to the bin folder, you will see two versions of the nunit-console application, we will be using nunit-console-x86.exe

NCover (1.5.8)

It will generate a coverage.xml file, that indicates how much code has been tested on our project. It has a community free option, which is the last option at the following link: http://www.ncover.com/download/current. You need to register in order to download it.

NCoverExplorer (1.4.0.7)

Helps us to create an HTML report file from the coverage.xml generated with NCover. The free version is available at: http://www.kiwidude.com/dotnet/DownloadPage.html

You will need to extract the files at a specific location.

NCoverExplorer Extras (1.4.0.5)

This package contains a couple of plugins that can help us with tasks in MSBuild, which can be downloaded also from: http://www.kiwidude.com/dotnet/DownloadPage.html

  • NCoverExplorer.MSBuildTasks.dll
  • NCoverExplorer.NAntTasks.dll

We’ll see how do we link these in the MSBuild file. I recommend you to put the extras folder in the same directory you installed NCoverExplorer

TestDriven.Net (3.3.2779)

As an alternative, you can download and install TestDriven.Net, which contains the three applications described above, you can get it here: http://www.testdriven.net/download.aspx

Note that, still you will need to get the NCoverExtras for the MSBuild task plugins

I recommend using TestDriven, since it also installs you a nice add-on for Visual Studio, which helps you to run tests easily. I will use TestDriven for the rest of the tutorial

3. Doing it

I suggest to go to https://github.com/aharita/calculator while reading the rest, so you can examine the complete source code. In this section I will explain some of the troubles I got into, and how to solve them. Some of those are particular to .NET 4.0 and having Windows 7 64 bit

MSBuild example file

We need to add three tasks in our MSBuild file

	<UsingTask
		TaskName="NCoverExplorer.MSBuildTasks.NCoverExplorer"
		AssemblyFile="C:\Program Files (x86)\TestDriven.NET 3\NCoverExplorer\NCoverExplorer.Extras\bin\NCoverExplorer.MSBuildTasks.dll"/>
	<UsingTask
		TaskName="NCoverExplorer.MSBuildTasks.NCover"
		AssemblyFile="C:\Program Files (x86)\TestDriven.NET 3\NCoverExplorer\NCoverExplorer.Extras\bin\NCoverExplorer.MSBuildTasks.dll"/>
	<UsingTask
		TaskName="NCoverExplorer.MSBuildTasks.NUnitProject"
		AssemblyFile="C:\Program Files (x86)\TestDriven.NET 3\NCoverExplorer\NCoverExplorer.Extras\bin\NCoverExplorer.MSBuildTasks.dll"/>

We also need to add the proper sections for handling NUnit, NCover and NCoverExplorer

	<Target Name="NUnitSimple">
		<Exec
			Command="&quot;C:\Program Files (x86)\TestDriven.NET 3\NUnit\2.6\nunit-console-x86.exe&quot; &quot;C:\Users\aharita\Documents\GitHub\calculator\Calculator.Tests\bin\Debug\Calculator.Tests.dll&quot;"/>
	</Target>

	<Target Name="NCoverSimple">
		<NCover
			ToolPath="C:\Program Files (x86)\TestDriven.NET 3\NCover\1.5.8\"
			CommandLineExe="C:\Program Files (x86)\TestDriven.NET 3\NUnit\2.6\nunit-console-x86.exe"
			CommandLineArgs="C:\Users\aharita\Documents\GitHub\calculator\Calculator.Tests\bin\Debug\Calculator.Tests.dll"
		/>
	</Target>

	<Target Name="NCoverExplorerSimple" DependsOnTargets="NCoverSimple">
		<NCoverExplorer
			ToolPath="C:\Program Files (x86)\TestDriven.NET 3\NCoverExplorer"
			ProjectName="Calculator Operations Tests"
			XmlReportName="CoverageSummary.xml"
			HtmlReportName="CoverageSummary.html"
			CoverageFiles="C:\Users\aharita\Documents\GitHub\calculator\coverage.xml"
		/>
	</Target>

Build.bat helper file

I also have a build.bat file that helps you to run msbuild with the build.xml MSBuild configuration

set COMPLUS_ProfAPI_ProfilerCompatibilitySetting=EnableV2Profiler
C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe build.xml

4. Troubleshooting

There are some problems that you might have while trying to do the setup, the most common ones are:

Profiler connection not established.

The full error is:

</pre>
Profiled process terminated. Profiler connection not established.
error MSB6006: "NCover.Console.exe" exited with code 1.
<pre>

Solution is:

  • You need to use nunit-console-x86.exe on all the MSBuild references
  • You need to execute the following in the same command window you execute your msbuild script
    • set COMPLUS_ProfAPI_ProfilerCompatibilitySetting=EnableV2Profiler

You can see the example file provided on GitHub

Empty coverage.xml file

Sometimes, you will end up with an empty coverage.xml file, some solution to this:

  • Open nunit-console-x86.exe.config and change it as follows:
</pre>
<startup useLegacyV2RuntimeActivationPolicy="true">
 <!-- Comment out the next line to force use of .NET 4.0 -->
 <supportedRuntime version="v4.0.30319" />
 <supportedRuntime version="v2.0.50727" />
 </startup>
<pre>

4. Resources

Hopefully, this guide will be helpful and you won’t have the same headaches as I had trying to do the setup. Following are some links resources that helped me through the problem.

https://github.com/aharita/calculator

http://www.kiwidude.com/blog/2007/04/ncover-problems-fixes-part-1.html

http://kiwidudeuk.blogspot.mx/2007/04/ncover-problems-fixes-part-2.html

http://stackoverflow.com/questions/4921443/force-ncover-1-5-8-to-use-v4-framework-like-testdriven-net-does

Advertisements

Configurar SSL en Ubuntu 10.04 y Apache2

2010/06/17 1 comment

A continuación se listarán los comandos necesarios para instalar y configurar apache, así como el módulo SSL
Nota:Todo está por default y es solo para propósitos de aprendizaje


# Instalamos Apache
sudo aptitude install apache2


# Habilitamos el módulo SSL de apache
sudo a2enmod ssl


# Habilitamos la configuración SSL por default
sudo a2ensite default-ssl


# Reiniciamos el servidor
sudo /etc/init.d/apache2 restart

Eso es lo mínimo necesario, y podemos probar que funciona entrando a https://127.0.0.1
Si deseamos crear nuestro propio certificado, debemos seguir los siguientes pasos


# Crear un directorio y hacer todas las siguientes operaciones ahí
# Creamos las llaves
sudo openssl genrsa -des3 -out server.key 1024


# Creamos el certificado con la llave
sudo openssl req -new -key server.key -out server.csr


# Creamos nuestro certificado, contestando las preguntas que nos indique
sudo openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt


# Abrimos el archivo de configuracion default-ssl, reemplazamos y añadimos la siguiente configuracion
SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
SSLCertificateFile /directorio/donde/guardaste/el/certificado/server.crt
SSLCertificateKeyFile /directorio/donde/guardaste/el/certificado/server.key


# Reiniciamos el servidor
sudo /etc/init.d/apache2 restart

Todo fue basado de este sitio:
http://beginlinux.com/blog/2009/01/ssl-on-ubuntu-810-apache2/

Categories: universidad

Ruby getter y setter

A continuación se muestran 3 maneras de hacer un getter y setter en Ruby

# 1. Utilizando funciones normales
class Persona
  def set_nombre(nombre)
    @nombre = nombre
  end
  
  def get_nombre
    @nombre
  end
end

p = Persona.new
p.set_nombre("Alfonso")
x = p.get_nombre
puts x

# 2. Sin tener que mandar un parámetro
# al setter
class Persona
  def set_nombre=(nombre)
    @nombre = nombre
  end
  
  def get_nombre
    @nombre
  end
end

p = Persona.new
p.set_nombre = "Harita"
x = p.get_nombre
puts x

# 3. Utilizando attr_reader, attr_writer
# y/o attr_accessor
class Persona
  attr_accessor :nombre
end

p = Persona.new
p.nombre = "WooT"
x = p.nombre
puts x
Categories: universidad

Calculadora básica en Ruby

Pues aquí la calculadora que nos pidieron :D
Supongo que despues será más compleja


# Contiene las funciones basicas de una calculadora
class Calculadora

 # Se declaran las variables de la clase
 attr_accessor :x, :y

 def suma
  temp = x + y
  puts "La suma de es: #{temp}"
 end

 def resta
  temp = x - y
  puts "La resta es: #{temp}"
 end

 def multiplicacion
  temp = x * y
  puts "La multiplicacion es: #{temp}"
 end

 def division
  temp = x / y
  puts "La division es: #{temp}"
 end

 def modulo
  temp = x % y
  puts "El modulo es: #{temp}"
 end

 def potencia
  temp = x ** y
  puts "La potencia es: #{temp}"
 end
end

# Hacemos un objeto y utilizamos sus atributos y metodos
calc = Calculadora.new
calc.x = 3.0
calc.y = 2.0
calc.suma
calc.resta
calc.multiplicacion
calc.division
calc.modulo

Categories: universidad

Ahora comere…

Hola! quiero presentarles un sitio en el que estoy trabajando actualmente

http://www.ahoracomere.com

Es un sitio donde encontrarás una lista de restaurantes, los menus que ofrecen y sus precios! Te invito a checarlo… :)

Categories: universidad

Índices en bases de datos

2009/11/05 2 comments

Índice en base de datos

  • Estructura de datos que mejora la velocidad de las operaciones
  • Se utiliza sobre campos donde se hagan frecuentes búsquedas
  • Pueden ser creados utilizando una o más columnas
  • Son construidos sonre árboles B, B+, B* o sobre mezclas de ellos

Ventajas de utilizar índices

  • Se evita una búsqueda en la tabla completa
  • Se evita la sobrecarga de CPU, disco y concurrencia
  • Se evitan las lecturas secuenciales
  • Mayor rapidez en la ejecución de consultas

Desventajas al utilizar índices

  • Desventaja para las tablas que utilizan frecuentemente un insert, delete o update ya que los índices se actualizan cada que se modifica una columna
  • Ocupan espacio, a veces más que los propios datos

Ejercicio

Para demostrar la rapidez de una consulta al utilizar índices, se creó una base de datos y se agregó aproximadamente 1 millón de registros

En la siguiente foto podemos observar el tiempo que tarda una consulta sin índice en una tabla con más de 1 millón de registros, el cual es de 45 segundos en total:

Sin índice

Consulta sin índice

Podemos observar como el tiempo ha disminuido considerablemente cuando utilizamos índices en nuestra tabla, bajando el tiempo de consulta a 6 segundos aproximadamente:

Con índice

Consulta con índice

Si desean descargar la práctica para hacer pruebas. Los tiempos pueden variar dependiendo de la velocidad de CPU y la memoria Ram que tenga la computadora

http://dl.dropbox.com/u/1955604/Tareas/Optimizaci%C3%B3n%20de%20Sistemas%20de%20Informaci%C3%B3n/Indices.zip

¿Qué es el tiempo?

Para los griegos de la época clásica el tiempo era un dios: Cronos

Tiempo

  • Relación que se establece entre dos o más fenómenos, sucesos, cuerpos u objetos
  • Duración de los fenómenos… época, siglo
  • Duración de las cosas sujetas a mudanza
  • Aspecto mensurable de la duración
  • El número, o la medida, del movimiento según antes y después

La administración

  • Viene del latín ad-ministrare, o ministrare, que se deriva de minister el cual viene de manus, que significa la mano o las manos
  • Administrar era “servir (con las manos) a o para”

La administración del tiempo

  • Es el arte de hacer que sirva para el beneficio de las personas y de las sociedades
  • Como el tiempo no existe en sí, la administración del tiempo es la administración de sí mismo

Tiempos

  • Tiempo físico: Fenómeno aplicable a la realidad objetiva y por encima de las vicisitudes de los seres humanos
  • Tiempo psicológico: Experiencia subjetiva, como vivencia, como interiorización sujeta a toda la gama de los caracteres, de los caprichos y de las neurosis
  • Tiempo lineal
  • Tiempo cíclico

Experiencia del tiempo

  • Corporal
    • La vida fisiológica es una sucesión de ritmos: la inspiración y la espiración, el hambre y la saciedad, la atención y la dispersión, el cansancio y el descanso
    • Se vive el tiempo en el paso de las estaciones cada año, en las variaciones del cuerpo a través de la infancia y de la asolescencia, en la fuerza de la juventud, en la resistencia de la madurez, en el debilitamiento progresivo de la vejez y en el curso evolutivo de las enfermedades
  • Psicológica
    • Sentimos el fluir de los acontecimientos: 10 minutos alegres son una experiencia temporal muy diferente de 10 minutos de extrema tensión o dolor
    • Tomamos distancia con respecto a los hechos pasados, localizándolos en el tiempo: “Hace una semana”, “hace tres meses”
  • Social
    • Dejamos de ver 15 años a un compañero de escuela y al encontrárnoslo, advertimos y casi palpamos el paso del tiempo
    • Comparamos nuestra ciudad o barrio con lo que era hace 20 años

Enemigo o desperdiciador del tiempo

  • Cualquier circunstancia que se opone a la consecución de nuestros objetivos, o simplemente, que nos aparta de nuestros valores