{"id":333,"date":"2017-02-13T15:38:10","date_gmt":"2017-02-13T15:38:10","guid":{"rendered":"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/?p=333"},"modified":"2017-04-27T15:59:42","modified_gmt":"2017-04-27T15:59:42","slug":"moq-net-introduccion-utilizarlo-ejemplos","status":"publish","type":"post","link":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/moq-net-introduccion-utilizarlo-ejemplos\/","title":{"rendered":"Moq.Net. Introducci\u00f3n, c\u00f3mo utilizarlo y ejemplos"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-386\" src=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2017\/02\/software-762486_960_720.jpg\" alt=\"Moq.Net\" width=\"520\" height=\"364\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2017\/02\/software-762486_960_720.jpg 960w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2017\/02\/software-762486_960_720-300x210.jpg 300w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2017\/02\/software-762486_960_720-768x538.jpg 768w\" sizes=\"auto, (max-width: 520px) 100vw, 520px\" \/><\/p>\n<p>Como desarrolladores nuestro objetivo principal es crear <strong>software de calidad, confiable y f\u00e1cil de mantener<\/strong>. Para llegar a este fin es importante asegurarnos de tener nuestra l\u00f3gica testada con pruebas unitarias, aunque no siempre es f\u00e1cil cubrir la cantidad de c\u00f3digo que nos gustar\u00eda.<\/p>\n<p><!--more--><\/p>\n<p>Conexiones con bases de datos, operaciones contra el sistema de ficheros o interacciones con APIs externas en general pueden hacer m\u00e1s dif\u00edcil que nuestros test unitarios sean realmente unitarios, ya que a\u00f1aden una dependencia sobre la que no siempre vamos a tener control.<\/p>\n<p>Por otro lado, dicha dependencia causa a menudo problemas de velocidad de ejecuci\u00f3n, lo que hace pesado ejecutar nuestra bater\u00eda\u00a0de test.<\/p>\n<p>Una manera de solucionar estos problemas es utilizando \u201c<strong>mocks<\/strong>\u201d, que no son m\u00e1s que objetos simulados que imitan el comportamiento de objetos reales.<\/p>\n<p>Crear estos \u00abmocks\u00bb a mano puede sonar costoso, y si la complejidad del sistema a testar es alta sin duda que lo es. Por fortuna, existen \u00abframeworks\u00bb que simplifican y agilizan esta tarea. En .NET disponemos de muchos \u00abframeworks\u00bb (FakeItEasy, JustMock&#8230;), pero nosotros nos vamos a centrar en Moq.<\/p>\n<h2>\u00a0Moq<\/h2>\n<p><strong>Moq nos ayuda aprovechar toda la potencia de C# para crear \u201cmocks\u201d<\/strong> limpios y mantenibles. La inclusi\u00f3n LINQ y su sintaxis intuitiva hace que sea extremadamente f\u00e1cil de utilizar y aprovechar en toda su extensi\u00f3n, ayudando a desarrolladores sin conocimientos previos de t\u00e9nicas de \u00abmocking\u00bb a ser productivos desde el minuto uno.<\/p>\n<p>Moq est\u00e1 disponible en NuGET, as\u00ed que para utilizarlo simplemente tenemos que instalar el paquete del \u00abframework\u00bb en nuestro proyecto de test. Para ello, lanzaremos el siguiente comando en la \u201cPackage Manager Console\u201d (asegur\u00e1ndonos de tener seleccionado nuestro proyecto de test como \u00abBase Project\u00bb:<\/p>\n<pre class=\"brush: powershell; light: true; title: ; notranslate\" title=\"\">\r\nInstall-Package Moq -Version 4.5.30\r\n<\/pre>\n<p>Esto deja listo e instalado el \u00abframework\u00bb y todas sus dependencias, as\u00ed que ya podemos comenzar a trabajar con \u00e9l.<\/p>\n<h3>Primeros pasos<\/h3>\n<p>Para demostrar lo f\u00e1cil de utilizar que es, vamos a ver un ejemplo simple de c\u00f3mo crear un objeto \u00abmock\u00bb y simular una llamada a uno de sus m\u00e9todos.<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\n\/\/ Creamos el mock sobre nuestra interfaz\r\nvar mock = new Mock&lt;IFoo&gt;();\r\n\r\n\/\/ Definimos el comportamiento del m\u00e9todo GetCount y su resultado\r\nmock.Setup(m =&gt; m.GetCount()).Returns(1);\r\n\r\n\/\/ Creamos una instancia del objeto mockeado y la testeamos\r\nAssert.AreEqual(1, mock.Object.GetCount());\r\n<\/pre>\n<p>Como se puede ver, la sintaxis es muy clara y nos permite crear c\u00f3digo \u201cfluent\u201d que aprovecha las expresiones lambda con la que todos estamos familiarizados. S\u00f3lo es necesario crear el \u201cmock\u201d a partir de la interfaz o la clase que queramos y empezar a definir comportamientos y resultados. Luego, simplemente hacemos una llamada al propio \u00abmock\u00bb mediante la propiedad \u00abObject\u00bb que nos devuelve una instancia del objeto simulado. Esta instancia se comportar\u00e1 como\u00a0hayamos definido mediante los \u00abSetup\u00bb.<\/p>\n<h3>Un poco mas en profundidad<\/h3>\n<p>Tambi\u00e9n podemos <strong>definir comportamientos<\/strong> dependiendo de los par\u00e1metros que se le pasen al objeto \u201cmock\u201d e incluso <strong>ejecutar acciones complejas<\/strong> accediendo al mismo par\u00e1metro proporcionado al m\u00e9todo simulado. Por ejemplo:<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\n\/\/ Creamos el mock sobre nuestra interfaz\r\nvar mock = new Mock&lt;IFoo&gt;();\r\n\r\n\/\/ Definimos el comportamiento del m\u00e9todo\r\nmock.Setup(m =&gt; m.ToUpperCase(It.IsAny&lt;string&gt;()))\r\n.Returns((string value) =&gt; { return value.ToUpperInvariant(); });\r\n\r\n\/\/ Definimos un comportamiento espec\u00edfico con parameter-matching\r\nmock.Setup(m =&gt; m.ToUpperCase(&quot;NotOK&quot;)).Returns(&quot;notok&quot;);\r\n\r\n\/\/ Obtenemos una instancia del objeto mockeado\r\nvar mockObject = mock.Object;\r\n\r\n\/\/ Comprobamos el comportamiento gen\u00e9rico\r\nAssert.AreEqual(&quot;OK&quot;, mockObject.ToUpperCase(&quot;ok&quot;));\r\n\r\n\/\/ Comprobamos que al pasar &quot;NotOK&quot; no lo devolvemos en may\u00fasculas\r\nAssert.AreNotEqual(&quot;NOTOK&quot;, mock.Object.ToUpperCase(&quot;NotOK&quot;));\r\n<\/pre>\n<p>Mediante \u00ab<strong>It.IsAny<\/strong>\u00bb podemos definir un comportamiento para todas las peticiones cuyo par\u00e1metro sea del tipo \u00abT\u00bb, aunque tambi\u00e9n podemos especificar par\u00e1metros concretos en el mismo contexto. Con esto podemos simular comportamientos inesperados y testar casos dif\u00edciles de reproducir en un entorno real.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-384 alignleft\" src=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2017\/02\/experimental-1157660_960_720.png\" alt=\"experimental-1157660_960_720\" width=\"264\" height=\"264\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2017\/02\/experimental-1157660_960_720.png 720w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2017\/02\/experimental-1157660_960_720-150x150.png 150w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2017\/02\/experimental-1157660_960_720-300x300.png 300w\" sizes=\"auto, (max-width: 264px) 100vw, 264px\" \/><\/p>\n<p>Moq tambi\u00e9n nos permite utilizar expresiones lambda, rangos de par\u00e1metros e incluso expresiones regulares para filtrar par\u00e1metros. Esto nos ayuda a programar \u00abmocks\u00bb que sean todo lo complejos que necesitemos y aun as\u00ed mantener el c\u00f3digo limpio y legible.<\/p>\n<p>Por otro lado, es muy f\u00e1cil\u00a0especificar que ciertas llamadas a nuestro \u201cmock\u201d lancen una excepci\u00f3n, o incluso definir \u201ccallbacks\u201d a la ejecuci\u00f3n de un m\u00e9todo simulado:<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\n\/\/ Podemos definir callbacks de manera muy simple\r\nmock.Setup(m =&gt; m.ToUpperCase(It.IsAny&lt;string&gt;()))\r\n.Returns((string value) =&gt; { return value.ToUpperInvariant(); })\r\n.Callback(() =&gt; { calls++; });\r\n\r\n\/\/ Esta l\u00ednea lanzar\u00e1 la excepci\u00f3n definida arriba\r\nAssert.AreEqual(&quot;EXCEPTION&quot;, mock.Object.ToUpperCase(&quot;Exception&quot;));\r\n\r\n\/\/ Llamamos una vez m\u00e1s al m\u00e9todo\r\nAssert.AreEqual(&quot;OK&quot;, mock.Object.ToUpperCase(&quot;ok&quot;));\r\n\r\n\/\/ Comprobamos que se ha ejecutado el callback\r\nAssert.AreEqual(1, calls);\r\n<\/pre>\n<h2>Un ejemplo real<\/h2>\n<p>Uno de los casos en los que mejor se comportan este tipo de \u00abframeworks\u00bb es en el<strong> testeo de aplicaciones N capas<\/strong>. Al desarrollar este tipo de aplicaciones, normalmente utilizamos inyecci\u00f3n de dependencias y las interfaces que generamos para esto son un candidato perfecto para la generaci\u00f3n de \u00abmocks\u00bb.<\/p>\n<p>Supongamos que estamos creando una aplicaci\u00f3n como las anteriormente descritas y que adem\u00e1s utilizamos el patr\u00f3n \u00abrepository\u00bb. Para evitarnos todos los problemas relacionados con conexiones contra base de datos cuando trabajamos con test unitarios y aun as\u00ed poder cubrir toda nuestra capa de negocio, podemos utilizar Moq para simular la capa repositorio:<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\nvar mockPersonRepository = new Mock&lt;IPersonRepository&gt;();\r\n\r\n\/\/ Simulamos un comportamiento correcto\r\nmockPersonRepository.Setup(m =&gt; m.Update(It.IsAny&lt;Person&gt;())).Returns(true);\r\n\r\n\/\/ Simulamos un comportamiento incorrecto\r\nmockPersonRepository\r\n.Setup(m =&gt; m.Create(It.Is&lt;Person&gt;(p =&gt; p.Age &gt; 0)).Returns(false);\r\n\r\n\/\/ Creamos una instancia del mock y la inyectamos a la capa superior\r\nvar personService = new PersonService(mockPersonRepository.Object);\r\n\r\n\/\/ Probamos\r\nAssert.IsTrue(personService.Update(new Person()));\r\nAssert.IsFalse(personService.Create(new Person { Age = -1 }));\r\n<\/pre>\n<p>Usando est\u00e1s t\u00e9cnicas podemos crear test verdaderamente unitarios, reproducibles, sin dependencias de ning\u00fan tipo y que realmente prueben la l\u00f3gica que nos interesa.<\/p>\n<h2>En Resumen<\/h2>\n<p><strong>Moq es un \u00abframework\u00bb muy completo<\/strong> que nos permite lanzarnos al mundo del \u00abmocking\u00bb sin pr\u00e1cticamente ning\u00fan conocimiento previo.<\/p>\n<p>Pero su simpleza no lo hace quedarse corto ni en caracter\u00edsticas ni en versatilidad. Como siempre, es recomendable <a href=\"https:\/\/github.com\/Moq\/moq4\/wiki\/Quickstart\">leer la documentaci\u00f3n<\/a> para no perdernos nada y aprovecharlo al cien por cien.<\/p>\n<p>Con este conocimiento en nuestro poder \u00a1ya no hay excusas para no tener la <strong>cobertura de c\u00f3digo de nuestros test<\/strong> al m\u00e1ximo!\u00a0?<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content --><span class=\"et_bloom_bottom_trigger\"><\/span>","protected":false},"excerpt":{"rendered":"<p>Como desarrolladores nuestro objetivo principal es crear software de calidad, confiable y f\u00e1cil de mantener. Para llegar a este fin es importante asegurarnos de tener nuestra l\u00f3gica testada con pruebas unitarias, aunque no siempre es f\u00e1cil cubrir la cantidad de &hellip; <a href=\"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/moq-net-introduccion-utilizarlo-ejemplos\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":126,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[69],"tags":[],"class_list":["post-333","post","type-post","status-publish","format-standard","hentry","category-moq"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v18.2.1 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Moq.Net. Introducci\u00f3n, c\u00f3mo utilizarlo y ejemplos - Piensa en software, desarrolla en colores<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/moq-net-introduccion-utilizarlo-ejemplos\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Moq.Net. Introducci\u00f3n, c\u00f3mo utilizarlo y ejemplos\" \/>\n<meta property=\"og:description\" content=\"Como desarrolladores nuestro objetivo principal es crear software de calidad, confiable y f\u00e1cil de mantener. Para llegar a este fin es importante asegurarnos de tener nuestra l\u00f3gica testada con pruebas unitarias, aunque no siempre es f\u00e1cil cubrir la cantidad de &hellip; Continue reading &rarr;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/moq-net-introduccion-utilizarlo-ejemplos\/\" \/>\n<meta property=\"og:site_name\" content=\"Piensa en software, desarrolla en colores\" \/>\n<meta property=\"article:published_time\" content=\"2017-02-13T15:38:10+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2017-04-27T15:59:42+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2017\/02\/software-762486_960_720.jpg\" \/>\n<meta name=\"author\" content=\"Juan Carlos Mart\u00ednez Garc\u00eda\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@jcmartinezg23\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Juan Carlos Mart\u00ednez Garc\u00eda\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/moq-net-introduccion-utilizarlo-ejemplos\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/moq-net-introduccion-utilizarlo-ejemplos\\\/\"},\"author\":{\"name\":\"Juan Carlos Mart\u00ednez Garc\u00eda\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/#\\\/schema\\\/person\\\/979c86ed9d5e671c262ed57b80f5bf44\"},\"headline\":\"Moq.Net. Introducci\u00f3n, c\u00f3mo utilizarlo y ejemplos\",\"datePublished\":\"2017-02-13T15:38:10+00:00\",\"dateModified\":\"2017-04-27T15:59:42+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/moq-net-introduccion-utilizarlo-ejemplos\\\/\"},\"wordCount\":1145,\"commentCount\":4,\"image\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/moq-net-introduccion-utilizarlo-ejemplos\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/wp-content\\\/uploads\\\/sites\\\/21\\\/2017\\\/02\\\/software-762486_960_720.jpg\",\"articleSection\":[\"moq\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/moq-net-introduccion-utilizarlo-ejemplos\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/moq-net-introduccion-utilizarlo-ejemplos\\\/\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/moq-net-introduccion-utilizarlo-ejemplos\\\/\",\"name\":\"Moq.Net. Introducci\u00f3n, c\u00f3mo utilizarlo y ejemplos - Piensa en software, desarrolla en colores\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/moq-net-introduccion-utilizarlo-ejemplos\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/moq-net-introduccion-utilizarlo-ejemplos\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/wp-content\\\/uploads\\\/sites\\\/21\\\/2017\\\/02\\\/software-762486_960_720.jpg\",\"datePublished\":\"2017-02-13T15:38:10+00:00\",\"dateModified\":\"2017-04-27T15:59:42+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/#\\\/schema\\\/person\\\/979c86ed9d5e671c262ed57b80f5bf44\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/moq-net-introduccion-utilizarlo-ejemplos\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/moq-net-introduccion-utilizarlo-ejemplos\\\/#primaryimage\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/wp-content\\\/uploads\\\/sites\\\/21\\\/2017\\\/02\\\/software-762486_960_720.jpg\",\"contentUrl\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/wp-content\\\/uploads\\\/sites\\\/21\\\/2017\\\/02\\\/software-762486_960_720.jpg\",\"width\":960,\"height\":672},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/#website\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/\",\"name\":\"Piensa en software, desarrolla en colores\",\"description\":\"Las ventajas que te ofrece Microsoft Azure y el mundo.NET\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/#\\\/schema\\\/person\\\/979c86ed9d5e671c262ed57b80f5bf44\",\"name\":\"Juan Carlos Mart\u00ednez Garc\u00eda\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c450966c6fe8374bc2c6bf7c86ce77e4c7504f9ddadcb56ff46f2c16ee6e55e4?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c450966c6fe8374bc2c6bf7c86ce77e4c7504f9ddadcb56ff46f2c16ee6e55e4?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c450966c6fe8374bc2c6bf7c86ce77e4c7504f9ddadcb56ff46f2c16ee6e55e4?s=96&d=mm&r=g\",\"caption\":\"Juan Carlos Mart\u00ednez Garc\u00eda\"},\"description\":\"Trabajo con tecnolog\u00eda Microsoft, especialmente NET Core y Azure, adem\u00e1s de con el stack de Office 365. Estoy certificado como MCSD en Web Applications y App Builder. Me apasiona lo que hay detr\u00e1s de las tecnolog\u00edas que utilizamos los desarrolladores a diario, el c\u00f3digo limpio y desarrollar pensando en colores. Actualmente aplico todo mi buen rollo trabajando como Software &amp; Cloud Architect para ENCAMINA.\",\"sameAs\":[\"https:\\\/\\\/x.com\\\/jcmartinezg23\"],\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/author\\\/jcmartinez\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Moq.Net. Introducci\u00f3n, c\u00f3mo utilizarlo y ejemplos - Piensa en software, desarrolla en colores","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/moq-net-introduccion-utilizarlo-ejemplos\/","og_locale":"es_ES","og_type":"article","og_title":"Moq.Net. Introducci\u00f3n, c\u00f3mo utilizarlo y ejemplos","og_description":"Como desarrolladores nuestro objetivo principal es crear software de calidad, confiable y f\u00e1cil de mantener. Para llegar a este fin es importante asegurarnos de tener nuestra l\u00f3gica testada con pruebas unitarias, aunque no siempre es f\u00e1cil cubrir la cantidad de &hellip; Continue reading &rarr;","og_url":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/moq-net-introduccion-utilizarlo-ejemplos\/","og_site_name":"Piensa en software, desarrolla en colores","article_published_time":"2017-02-13T15:38:10+00:00","article_modified_time":"2017-04-27T15:59:42+00:00","og_image":[{"url":"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2017\/02\/software-762486_960_720.jpg","type":"","width":"","height":""}],"author":"Juan Carlos Mart\u00ednez Garc\u00eda","twitter_card":"summary_large_image","twitter_creator":"@jcmartinezg23","twitter_misc":{"Escrito por":"Juan Carlos Mart\u00ednez Garc\u00eda","Tiempo de lectura":"6 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/moq-net-introduccion-utilizarlo-ejemplos\/#article","isPartOf":{"@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/moq-net-introduccion-utilizarlo-ejemplos\/"},"author":{"name":"Juan Carlos Mart\u00ednez Garc\u00eda","@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/#\/schema\/person\/979c86ed9d5e671c262ed57b80f5bf44"},"headline":"Moq.Net. Introducci\u00f3n, c\u00f3mo utilizarlo y ejemplos","datePublished":"2017-02-13T15:38:10+00:00","dateModified":"2017-04-27T15:59:42+00:00","mainEntityOfPage":{"@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/moq-net-introduccion-utilizarlo-ejemplos\/"},"wordCount":1145,"commentCount":4,"image":{"@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/moq-net-introduccion-utilizarlo-ejemplos\/#primaryimage"},"thumbnailUrl":"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2017\/02\/software-762486_960_720.jpg","articleSection":["moq"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/moq-net-introduccion-utilizarlo-ejemplos\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/moq-net-introduccion-utilizarlo-ejemplos\/","url":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/moq-net-introduccion-utilizarlo-ejemplos\/","name":"Moq.Net. Introducci\u00f3n, c\u00f3mo utilizarlo y ejemplos - Piensa en software, desarrolla en colores","isPartOf":{"@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/moq-net-introduccion-utilizarlo-ejemplos\/#primaryimage"},"image":{"@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/moq-net-introduccion-utilizarlo-ejemplos\/#primaryimage"},"thumbnailUrl":"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2017\/02\/software-762486_960_720.jpg","datePublished":"2017-02-13T15:38:10+00:00","dateModified":"2017-04-27T15:59:42+00:00","author":{"@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/#\/schema\/person\/979c86ed9d5e671c262ed57b80f5bf44"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/moq-net-introduccion-utilizarlo-ejemplos\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/moq-net-introduccion-utilizarlo-ejemplos\/#primaryimage","url":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2017\/02\/software-762486_960_720.jpg","contentUrl":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2017\/02\/software-762486_960_720.jpg","width":960,"height":672},{"@type":"WebSite","@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/#website","url":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/","name":"Piensa en software, desarrolla en colores","description":"Las ventajas que te ofrece Microsoft Azure y el mundo.NET","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Person","@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/#\/schema\/person\/979c86ed9d5e671c262ed57b80f5bf44","name":"Juan Carlos Mart\u00ednez Garc\u00eda","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/c450966c6fe8374bc2c6bf7c86ce77e4c7504f9ddadcb56ff46f2c16ee6e55e4?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/c450966c6fe8374bc2c6bf7c86ce77e4c7504f9ddadcb56ff46f2c16ee6e55e4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c450966c6fe8374bc2c6bf7c86ce77e4c7504f9ddadcb56ff46f2c16ee6e55e4?s=96&d=mm&r=g","caption":"Juan Carlos Mart\u00ednez Garc\u00eda"},"description":"Trabajo con tecnolog\u00eda Microsoft, especialmente NET Core y Azure, adem\u00e1s de con el stack de Office 365. Estoy certificado como MCSD en Web Applications y App Builder. Me apasiona lo que hay detr\u00e1s de las tecnolog\u00edas que utilizamos los desarrolladores a diario, el c\u00f3digo limpio y desarrollar pensando en colores. Actualmente aplico todo mi buen rollo trabajando como Software &amp; Cloud Architect para ENCAMINA.","sameAs":["https:\/\/x.com\/jcmartinezg23"],"url":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/author\/jcmartinez\/"}]}},"_links":{"self":[{"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/posts\/333","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/users\/126"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/comments?post=333"}],"version-history":[{"count":0,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/posts\/333\/revisions"}],"wp:attachment":[{"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/media?parent=333"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/categories?post=333"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/tags?post=333"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}