Cómo me estaba preparando para una entrevista # 1

A veces sucede que quieres cambiar de trabajo. En este caso, tenemos varias opciones:



  1. Solicite un aumento para obtener una motivación adicional para trabajar
  2. Requiera unas vacaciones para tomar un descanso de las tareas aburridas y ganar fuerza.
  3. Cambie de trabajo publicando su currículum con la esperanza de recibir una oferta que lo satisfaga.


Si aún eligió la tercera opción, entonces hizo lo que hice. Y recibí una oferta de ensueño: mi propia pila (últimamente, me vi obligado a cambiar mi C # favorito, a php, y también el framework bitrix), fintech, y con un aumento de salario. Por supuesto, antes que nada, decidí actualizar mis conocimientos. Este texto es, en primer lugar, mi hoja de trucos, compilado a partir del texto de vacante para el puesto de Ingeniero .NET Medio de mis sueños.



ORM - Entity Framework / NHibernate



Entity framework y NHibernate son frameworks que utilizan tecnología ORM (mapeo orientado a objetos (mapeo) para mapear objetos (clases) con tablas en una base de datos. Es decir, ORM, condicionalmente, es una capa entre el código y la base de datos, lo que permite que los objetos creados en el programa agregar / recibir a / desde la base de datos.



Ventajas de EF



  • Le permite crear una tabla por código o usando EF Designer y generar una nueva base de datos
  • Puede "automatizar" la creación de objetos, así como realizar un seguimiento de los cambios en estos objetos, simplificando así el proceso de actualización de la base de datos.
  • Usar una sola sintaxis (LINQ) para cualquier colección de objetos, ya sean datos de una base de datos o simplemente una lista; es lo suficientemente rápido, si se usa correctamente, y también razonablemente lacónico.
  • EF puede reemplazar grandes trozos de código que usted mismo escribiría.
  • Reduce el tiempo de desarrollo.
  • Admite operaciones de bases de datos asincrónicas.


Contras de EF



  • Usar un enfoque "no convencional" para el procesamiento de datos que no está disponible con todas las bases de datos.
  • Para cualquier cambio en el esquema de la base de datos, EF se negará a trabajar; Se requieren cambios en el código.
  • El código SQL se genera de forma descontrolada, debemos confiar en los desarrolladores de EF.
  • .


NHibernate



  • .
  • .
  • Unit Of Work.
  • .
  • .
  • .


NHibernate



  • .
  • , , XML — .
  • , .


Writing unit tests frameworks



Las pruebas unitarias le permiten probar rápida y automáticamente los componentes individuales de una aplicación independientemente del resto de la aplicación. Es posible que las pruebas unitarias no siempre cubran todo el código de la aplicación, pero, sin embargo, pueden reducir significativamente el número de errores que ya se encuentran en la etapa de desarrollo.



Marcos populares:



  • xUnit.net
  • Prueba de MS
  • NUnit


A partir de Visual Studio 2019, se han agregado tres tipos de proyectos específicamente para las pruebas: xUnit Test Project (.NET Core), MSTest Test Project (.NET Core) y NUnit Test Project (.NET Core)



. Consideraré que las



pruebas de xUnit en xUnit se definen como métodos a los que se aplican los atributos de Hecho, Teoría.

El hecho es una prueba separada que no tiene parámetros. Teoría: una prueba que acepta parámetros puede tener varios escenarios.



Ejemplo
[Fact]
    public void Should_do_somthing(){...}

    [Theory]
    [InlineData(20, 180, 80, ”good”)]
    [InlineData(20, 180, 50, ”bad”)]
    public void Should_measure_weight(int age, int height, decimal weight, string expected){...}

      
      







Existe todo un paradigma de pruebas que xUnit implementa completamente: Arrange-Act-Assert.



  • Organizar: establece las condiciones iniciales para la ejecución de la prueba.
  • Act: ejecuta una prueba (generalmente representa una línea de código)
  • Afirmar: verifica el resultado de la prueba


Arrange y Act son código C # normal, mientras que Assert es una clase separada con un conjunto de métodos estáticos para verificar los resultados.



Métodos básicos
  • Todos (colección, acción): este método confirma que todos los elementos de la colección de la colección corresponden a la acción de la acción
  • Contains(expectedSubString, actualString): , actualString expectedSubString
  • DoesNotContain(expectedSubString, actualString): , actualString expectedSubString
  • DoesNotMatch(expectedRegexPattern, actualString): , actualString expectedRegexPattern
  • Matches(expectedRegexPattern, actualString): , actualString expectedRegexPattern
  • Equal(expected, result): result expected
  • NotEqual(expected, result): result expected
  • Empty(collection): , collection
  • NotEmpty(collection): , collection
  • True(result): , true
  • False(result): , false
  • IsType(expected, result): , expected
  • IsNotType(expected, result): , expected
  • IsNull(result): , null
  • IsNotNull(result): , null
  • InRange(result, low, high): , low high
  • NotInRange(result, low, high): , low high
  • Same(expected, actual): , expected actual
  • NotSame(expected, actual): , expected actual
  • Throws(exception, expression): , expression exception




Así, hemos pasado 2 de los 7 puntos del resumen.



En la siguiente parte:



  • Marcos de DI
  • Comprensión de diseños de aplicaciones (n-Tier, Onion).


Gracias por leer, entiendo que no soy el único que se prepara para algo;)



Materiales: uno , dos , tres



All Articles