Buscar

El Blog del Maldo

Si, es poco lo que escribo

Categoría

C#

Apple y Samsung se unen para eliminar al chip SIM

Gaceta Tecnologica

Las tarjetas SIM, conocidas como el famoso chip que permite poder cambiar de smartphone sin perder la línea, tiene sus días contados ante una iniciativa de Apple y Samsung, que busca transformar este sistema en una nueva tecnología virtual que facilite el cambio entre operadoras de telefonía celular.

Según el reporte del Financial Times, las dos compañías, acérrimos rivales en el segmento de los dispositivos móviles, están desarrollando un nuevo estándard denominado e-SIM, que permite definir el número de línea sin tener la necesidad de utilizar una tarjeta física. Se espera que esta modalidad llegue al mercado en algún momento del próximo año, aunque Apple ya está experimentando algunos cambios similares mediante la Apple SIM, que permite elegir la operadora para la iPad Air 2 desde un único chip físico.

Virtualizar las prestaciones de la tarjeta SIM permitiría que los fabricantes puedan ganar un espacio pequeño pero vital para reducir…

Ver la entrada original 69 palabras más

Tipo de Dato Bag

Nuevamente hace un rato que no escribía, ya se me había incluso quitado la costumbre, sobre todo porque el público objetivo del tutorial no lo leyó nunca ¬¬, pero bueno, mejor volver a la modalidad ecléctica donde escribo lo que se me ocurre y no me preocupo de mucho más, es más sano, que sea solo una catarsis  y una forma de dejar registro de las cosas que sean interesantes e importantes para mí. Luego del preámbulo aburrido y culposo clásico de cada periodo sin escribir ataquemos el punto, estructuras de datos.

Últimamente he estado leyendo el libre Algorithms, de Robert Sedgewick y Kevin Wayne, para refrescar conocimientos y repasar las materias ya añejadas en el inconsciente (esas cosas que siempre usas de una u otra forma pero no recuerdas al pie de la letra) y en la parte de las estructuras de datos me encontré con una que no conocía, así que para que no se me olvide la voy a escribir por acá, les presento el tipo de dato Bag (bolsa o bolsón sería en español).

Bag es un tipo de dato de colecciones de ítems cuya particularidad es que no soporta la eliminación de elementos, se puede instanciar un nuevo Bag, tiene un método para añadir un ítem al Bag, un método que pregunta si está vacío, uno que entrega el tamaño, y la posibilidad de iterar sobre todos los ítems, solo eso, no está ordenado, no deben los objetos ser iguales, no exige nada de eso. Por lo que una interfaz para este tipo de dato sería como la siguiente:

Este tipo de dato es muy útil para impedir que se eliminen ítems, ya que no implementa esta función y que no importe el orden en el cual se guardan los ítems en la estructura de datos. Un ejemplo de utilización puede ser por ejemplo cuando se quieren sacar datos estadísticos de un conjunto, con el conjunto definido no se quiere que se eliminen datos de este porque modifica los cálculos de la estadística y el orden en que ingresa no es importante ya que lo interesante es el resultado estadístico.

Eso, interesante, un tanto específico pero muy útil bien implementado.

Code Chef

He estado un poco flojo este último tiempo y no he posteado nada de nada en los últimos días, como este blog no lo lee nadie la verdad como que da un poco lo mismo XD, pero lo importante es que me propuse escribir todos los días y no lo he echo, aunque la falta fue justificada igual no viene al caso y estoy en deuda, me pongo al día si o si esta semana, pero como no comenta nadie a veces a uno le da un poco de lata, bueno… comenten y me animaré mas.. si alguien lee esto 😦

Bueno enfoquemos, hoy es martes, el día del link interesante, la semana pasada postie pex for fun, que es un enlace donde en línea se resuelve un problema, es tan bueno que un amigo lo usa como examen para las personas que entrevista cuando recluta personal, esta semana voy a poner otra opción de preguntas con un grado mayor de dificultad.

Code Chef, es una comunidad en línea que hace concursos de programación constantemente, en este caso se compite contra las demás personas de la comunidad y no contra una solución secreta, tiene el formato de las competencias de la ACM ICPC, con una entrada por la entrada estándar, que es básicamente leer por consola los datos de entrada, una salida con un formato por defecto, el programa se prueba contra muchas entradas y se ranquea si soluciona el problema en el tiempo determinado, los problemas como entrenamiento están clasificados y constantemente hay concursos, se están buscando una base de problemas para dar a personas que recién aprenden a programar o problemas complejos que se pueden solucionar con algoritmos avanzados, este es el lugar para encontrarlos, es muy bueno muy completo y no solo miden si la solución resuelve el set de problemas completo, si no si lo resuelve rápido y quien lo resuelve más rápido.

Eso, si quieren una base de problemas más complejo que se corrija en tiempo real, acá es su lugar, hay de todos los grados de complejidad, ojalá les guste.

 

Test de método privado estático C#

Hace 2 semanas escribí un post, sobre como testear métodos privados, no me percaté que con esta forma solo se podían escribir test unitarios para métodos de instancia, para los métodos estáticos privados se utiliza otra modalidad.

Supongamos que por alguna razón usted necesita métodos estáticos (que según yo, junto con la sentencia if, son el diablo, un cáncer que hay que aprender a vivir con el, pero intentar erradicarlo) y que por una razón aún más oscura se deben testear (como acotó Erwin en el post anterior, se debe testear comportamiento y no implementación), esto no debería suceder, pero supongamos.

Modifiquemos la clase matemática que teníamos antes para hacer la maldad de dejarla estática 😥 … debo insistir…

Con esto se debe crear otro método de prueba para esta clase, esto quedaría de la forma

Como se ve, se crea un objeto para envolver la clase Matemática que es estática, este objeto es de tipo PrivateType, con este objeto creado y a través de ese objeto, se puede acceder al método InvokeStatic, entregando como parámetro el nombre del método estático privado que se quiere testear y hacia al lado los parámetros de entrada de dicho método estático, como resultado entrega un objeto de tipo object, que como la vez anterior debía ser convertido al tipo del resultado que entrega el método para hacer el assert.

Eso, se los dejo, espero sinceramente que nunca lo usen, pero si no hay de otra, acá como se hace.

Test de Integración vs Test Unitarios

Me quería dar la lata de hablar sobre los tipos de test y de algunas definiciones, pero encontré un post muy bueno e interesante así que, ante eso, solo lo dejo como referencia y ustedes hacen como que lo escribí yo y me felicitan XD, en serio muy buen post, claro y entretenido, aunque está pensado en aplicaciones java, los conceptos son universales.

Test de Integración vs Test Unitarios.

Testear métodos privados C#

Ya, me cansé que me digan que no pueden testear un método porque es privado, que no tiene sentido cambiarlo a público solo para testearlo así que no hay test unitario para el método, se puede testear un método privado en c# sin cambiar su acceso.

Ejemplo en C# para los escépticos, supongamos una clase matemática que suma los números desde x a y, en un método privado, con eso tenemos la siguiente clase.

public class Matematica
{
   private int SumaNumeros(int x, int y)
   {
      int acumulador = 0;
      for (int i = x; i <= y; i++)
      {
         acumulador += i;
      }
      return acumulador;
   }
}

Ahora para testearlo, en una clase de test de visual studio, utilizamos el la clase PrivateObject con la cual envolvemos el objeto a testear y usando el método Invoke podemos llamar al método privado con la lista de parámetros de entrada que este toma listados para el lado, este método retorna un objeto, que es donde se envuelve la respuesta de este método.

El ejemplo en código de como hacer estos llamados.

[TestMethod]
public void ProbandoSumadorPrivado()
{
   var objetoTest = new Matematica();
   var privateTest = new PrivateObject(objetoTest);

   object obj = privateTest.Invoke("SumaNumeros", 1, 4);
   Assert.AreEqual(10, (int) obj);
}

Como se ve, se crea el objeto matemática y se hace un nuevo PrivateObject con el objeto matemática como parámetro del constructor, para este nuevo objeto se llama al método Invoke, se pasa el nombre del método que se quiere probar como string como primer argumento y los parámetros listados hacia el lado, como los argumentos siguientes del método Invoke, como respuesta esté entrega un objeto del tipo object, la repuesta queda en la variable obj, y para poder ser comparada se debe convertir en el tipo de dato que retorna el método en este caso un entero.

Esto no rompe el principio Open-Close de orientación a objetos, porque como es un método de test, este debe conocer que es lo que entrega y de antemano la respuesta al test para poder ser un test efectivo.

Así que ya sabe, nunca mas diga “no puedo testear métodos privados en C#”.

Blog de WordPress.com.

Subir ↑