Buscar este blog

sábado, 5 de febrero de 2011

Tips y errores del control ListView

Te aparece el siguiente error al cargar una  página con un control ListView:
capacity was less than the current size.
Parameter name: value

Esto ocurre cuando tienes un ListView enlazado a un ObjectDataSource con la propiedad EnablePaging en verdadero y el método establecido en SelectCountMethod devuelve un tipo de datos long, para corregir este error tienes que cambiar el método SelectCountMethod para que regrese un int.
Es un error un poco rebuscado pero puede suceder, afortunadamente el tipo int puede manejar la gran mayoría de los usos y en todo caso quien va a paginar tantos datos.

jueves, 3 de febrero de 2011

Pruebas unitarias con Nunit

Las pruebas unitarias son muy importantes en el proceso de desarrollo de una aplicación, para realizarlas podemos usar las herramientas incluidas en Visual Studio, pero no todas las versiones tienen esta característica, y por supuesto esta la gente que no usa Visual Studio, Aquí es donde entra Nunit que es un framework para realizar pruebas unitarias que no depende en lo absoluto de Visual Studio.
Nunit es la version para Net Framework del original Junit que es la versión para Java y se puede obtener de la pagina oficial de Nunit.
Una vez instalado creamos de preferencia un proyecto separado para nuestras pruebas este proyecto puede  ser preferentemente de tipo librería de clases ya que toda la interacción con nuestras pruebas se hace usando el ejecutable de Nunit, A este proyecto añadimos una referencia a la dll nunit .framework.dll que se encuentra en el directorio en que se instalo Nunit (no en el GAC), también añadimos una referencia al proyecto que vamos a probar y empezamos a crear las pruebas.
La forma básica en que se crea una prueba es creando una clase que tiene aplicado el atributo TestFixture a esta clase le añadimos métodos con el atributo Test aplicado estos métodos son los que utilizaremos para crear las pruebas por supuesto podemos añadir también clases y métodos sin los atributos mencionados que podrían ser para ayudar en el proceso de prueba.
En nuestros métodos de prueba lo que haremos es usar los métodos de Nunit para comprobar que nuestras clases den los resultados esperados, el mas comúnmente usado es el metodo AreEqual de la clase Assert de Nunit que compara una variable contra un valor esperado.
Aquí esta el ejemplo, lo primero que les muestro es la clase que vamos a probar:


   1:  namespace Prueba.Data {
   2:      public class User {
   3:          public string Name { get; set; }
   4:          public string Password { get; set; }
   5:          public User(string name, string password) {
   6:              Name = name;
   7:              Password = password;
   8:          }
   9:      }
  10:  }

Y después nuestra clase de prueba:


   1:  using NUnit.Framework;
   2:  using Prueba.Data;
   3:   
   4:  namespace NunitTests {
   5:      [TestFixture]
   6:      public class UserTest {
   7:          [Test]
   8:          public void ConstructorTest() {
   9:              User user = new User("Pedro", "secreto");
  10:              Assert.AreEqual("Pedro", user.Name);
  11:              Assert.AreEqual("secreto", user.Password);
  12:          }
  13:      }
  14:  }

Una vez que tenemos listas las pruebas compilamos el proyecto y abrimos el ejecutable de Nunit con el que se realizaran las pruebas.
En Nunit usamos el menú File -> Open Project y abrimos la dll que se genero al compilar el proyecto, en el panel izquierdo aparecerá un árbol que contiene todos los métodos que creamos para las pruebas en una jerarquía que sigue a la del proyecto, podemos ejecutar un solo método una rama del arbol o todas las pruebas a la vez.
En este caso solo tenemos una prueba presionamos el botón Run y se ejecutara el proyecto de pruebas una barra de progreso nos muestra el porcentaje de pruebas ejecutadas según se van ejecutando y el color verde nos indica que ninguna ha fallado en caso contrario cambiara a color rojo.
Si al final hubo errores se mostraran en el árbol y en los paneles inferiores mostrando la prueba que fallo e información acerca de el error incluyendo la posición en el código que fallo, también podemos depurar el código en la ejecución usando el depurador de Visual Studio u otro depurador escogiendo la instancia de Nunit como el ejecutable a depurar.



Por supuesto NUnit puede probar muchas más cosas que la igualdad de miembros, por ejemplo algo muy útil es que puede probar cuando un método manda una excepción en el momento adecuado, pero la API de NUnit es muy amplia para un blog y lo mejor es que te dirijas a la documentación de NUnit para la última versión para una mejor referencia.
Para aprender más acerca de las pruebas unitarias con .Net Framework visita:
Lista de artículos acerca de pruebas unitarias con .Net Framework

miércoles, 2 de febrero de 2011

Usando el control TemplatePagerField en un DataPager

Una de las características del control DataPager es que nos brinda un área donde podemos mostrar información relevante a la paginación (en realidad podemos mostrar cualquier cosa en esta área pero lo lógico es que la relacionemos con la paginación), tal como la pagina en la que estamos, el total de paginas o el numero de registro en que inicia la pagina, esto se logra añadiendo un Field TemplatePagerField en el template Fields del DataPager y editando el template PagerTemplate del control, en este template podemos poner cualquier código Asp.Net y lo importante es que tenemos acceso a las propiedades del DataPager con lo que podemos mostrar la información antes mencionada.
Aquí tenemos el ejemplo de un DataPager que muestra el número de registro que se muestra y el total de paginas disponibles.


   1:  <asp:DataPager ID="DataPager1" runat="server" PagedControlID="ListView1" 
   2:      PageSize="3">
   3:      <Fields>
   4:          <asp:NextPreviousPagerField ButtonType="Button" ShowFirstPageButton="True" 
   5:              ShowNextPageButton="False" ShowPreviousPageButton="False" />
   6:          <asp:NumericPagerField />
   7:          <asp:NextPreviousPagerField ButtonType="Button" ShowLastPageButton="True" 
   8:              ShowNextPageButton="False" ShowPreviousPageButton="False" />
   9:          <asp:TemplatePagerField>
  10:              <PagerTemplate>
  11:                  <br />
  12:                  <asp:Label runat="server" Text="<%# Container.StartRowIndex  %>"/>
  13:                  &nbsp;-
  14:                  <asp:Label runat="server"
  15:                      Text="<%# Container.StartRowIndex +  Container.PageSize %>"/>
  16:                  &nbsp;de
  17:                  <asp:Label runat="server" Text="<%# Container.TotalRowCount  %>"/>
  18:              </PagerTemplate>
  19:          </asp:TemplatePagerField>
  20:      </Fields>
  21:  </asp:DataPager>

Los propiedades del DataPager relacionadas con la paginación son:
StartRowIndex: el número del primer registro mostrado
PageSize: el total de registros mostrados en cada pagina
TotalRowCount: el total de registros disponibles para la paginación

Para aprender más sobre el control DataPager busca en la lista de artículos sobre el control DataPager en este blog.

domingo, 30 de enero de 2011

Nuevo sistema de ayuda en Visual Studio 2010

Acabo de instalar el nuevo Visual Studio 2010 y lo primero que hice fue abrir la ayuda ya que mientras lo instalaba note que ya no se instala la MSDN como en las versiones anteriores, ahora la ayuda se muestra en el navegador de Internet mostrando páginas que se cargan desde un servidor web local que inicia el Visual Studio.
Francamente me pareció un mal cambio lo primero que note es que ya no tiene índice ahora se tiene que usar la función de búsqueda para encontrar los temas, además esta búsqueda es un poco lenta y se tiene que buscar en los temas encontrados. Al principio pensé que se mostraba esta ayuda debido a que la versión de Visual Studio es la de prueba pero investigando un poco encontré que en todas las versiones de Visual Studio 2010 se usa este sistema nuevo.
Aquí esta la imagen del nuevo sistema:


Afortunadamente el equipo de la MSDN lanzo un visor de ayuda (Microsoft Help Viewer Power Tool (Beta)) que muestra los temas desde el mismo servidor usando un programa un poco más completo que el navegador simplemente este programa esta hecho en SilverLight y funciona de manera predeterminada mostrándose en el navegador por defecto, aunque tambien se puede configurar para funcionar como aplicación independiente.
Aquí esta la imagen funcionando sobre Firefox.



Esta opción esta mucho mejor incluye un índice y se acerca un poco a la versión anterior de la MSDN pero francamente todavía le falta mucho para igualarla: le faltan herramientas y el índice es un poco lento.
Bueno si quieren probarla (esta en etapa Beta) la pueden bajar de la siguiente página:
Microsoft Help Viewer Power Tool (Beta)

miércoles, 27 de octubre de 2010

Comprimir Web Services

Llamar un web service de manera que la respuesta nos llegue comprimida es muy sencillo pero de entrada nos podemos tardar un poco en encontrar la forma de hacerlo de hacerlo por eso publico esta entrada.
Es muy sencillo solo tenemos que poner la propiedad EnableDecompression de nuestra instancia cliente a verdadero y listo tendremos nuestro web service comprimido (siempre y cuando la compresión este habilitada en IIS por supuesto).

WSInstance client = WSClient.Client();
client.EnableDecompression = true;