{"id":1262,"date":"2014-04-15T11:30:20","date_gmt":"2014-04-15T10:30:20","guid":{"rendered":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/?p=1262"},"modified":"2014-04-15T11:22:48","modified_gmt":"2014-04-15T10:22:48","slug":"test-unitarios-inyecciones-de-dependencias-es-posible-en-sharepoint","status":"publish","type":"post","link":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/test-unitarios-inyecciones-de-dependencias-es-posible-en-sharepoint\/","title":{"rendered":"Test Unitarios, Inyecciones de dependencias y ALM es posible en SharePoint"},"content":{"rendered":"<p>Generalmente, procesos \u00abnormales\u00bb en el desarrollo software (como son ALM, Test Unitarios, TDD e inyecciones de dependencias) son conceptos un tanto alejados de la realidad de muchos desarrolladores de SharePoint.<\/p>\n<p><strong>\u00bfMotivos?\u00a0<\/strong>Si yo tengo que trabajar s\u00ed o s\u00ed con SharePoint y no puedo aislarme de SharePoint, necesito ejecutar esta sentencia s\u00ed o s\u00ed dentro de nuestro servidor favorito. Ahora bien, ese mismo problema no lo tienen los desarrolladores que quieren acceder a los datos de la base de datos seleccionadas, ya sea SQL Server, Mongo DB, MySql u Oracle. Por lo tanto debemos de plantearnos que tenemos que trabajar igual que se hacen en otras plataformas\/entornos.<!--more--><\/p>\n<p><strong>\u00bfAhora bien como lo podemos conseguir?<\/strong><\/p>\n<p>Tal y como <a href=\"http:\/\/www.gavd.net\/servers\/sharepointv5\/spsv5_item.aspx?top=1&amp;itm=1796\" target=\"_blank\">public\u00f3 <\/a>el Maestro (Gustavo Velez) desde Microsoft han desarrollado un emulador de SharePoint de tal forma que en tus pruebas unitarias \u00ab<em>emulas<\/em>\u00bb que tienes un SharePoint (aunque f\u00edsicamente no lo tengas). Optar por esta soluci\u00f3n, sin contar que solamente est\u00e1 disponible para los usuarios de Visual Studio Ultimate no me parece la m\u00e1s elegante ni ver\u00eddica. Primero, porque de alguna forma has de llevar tus dll en tu \u00ab<em>entorno<\/em>\u00bb sin SharePoint porque si no, tu proyecto no compila ya que no tiene librerias. \u00a0Y segundo, tu capa de acceso a datos no la tienes aislada de SharePoint.<\/p>\n<p><strong>\u00bfComo lo solucionamos nosotros?<\/strong><\/p>\n<p>Siguiendo los patrones SOLID de programaci\u00f3n, nosotros dentro de nuestro FrameWork propio Enmarcha tenemos una interfaz Data que es semejante a la siguiente:<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\nnamespace Encamina.Enmarcha.Data.Interfaces\r\n{\r\n    public interface IRepository&lt;I, T&gt; : IPageable\r\n    {\r\n        T Get(I id);\r\n        ICollection&lt;T&gt; GetAll(int page);\r\n        ICollection&lt;T&gt; Query(IQuery   query, int page);\r\n        int Insert(T data);\r\n        bool Save(I id, T data);\r\n        bool Delete(I id);\r\n        int Length();\r\n    }\r\n}\r\n<\/pre>\n<p>Esta interfaz parece simple, pero tiene diversos aspectos muy interesantes. Por un lado, pod\u00e9is observar que est\u00e1 preparada para una Clase Generica de tal forma que es v\u00e1lida tanto para una clase \u00abMaestro\u00bb como para una clase \u00abCoche\u00bb y la podemos \u00fatilizar en los diversos desarrollos.<\/p>\n<p>El segundo aspecto interesante es que utilizamos una Interfaz IQuery donde implementamos una interfaz de Consultas, de forma que si utilizamos SharePoint tendremos una clase CamlQuery que implemente esta interfaz. Pero si utilizamos consultas SQL tendremos otra interfaz SQLQuery que la implemente.<br \/>\n<strong>\u00bfQue ganamos con esto?<\/strong><\/p>\n<ol>\n<li>Agilizamos el cambio de la plataforma en la que almacenamos los datos (en algunos desarrollos quizas no nos interese almacenar los datos en listas de SharePoint y optamos por un modelo relacional). Este cambio, ahora es algo intranscendente en nuestra aplicaci\u00f3n y con cambiar la inyecci\u00f3n de dependencia lo tenemos solucionado.<\/li>\n<li>Ahorramos mucho trabajo a los front-end developers que no se tienen que preocupar por lo que tienen debajo. Ellos trabajan directamente con el modelo que proponemos y cualquier cambio de la plataforma en la que lo almacenamos no le afecta.<\/li>\n<li>Estandarizamos la forma de acceder a los datos de SharePoint, no nos tendremos que preocupar de si el desarrollador llama correctamente al m\u00e9todo SPQuery, si indica el n\u00famero de elementos a devolver&#8230; esta responsabilidad solamente la tendremos una vez vamos a implementar la interfaz.<\/li>\n<\/ol>\n<h2>Inyecciones de dependencias<\/h2>\n<p>Ahora bien, para poder conseguir tener esta clase aislada por un lado los datos y, por otro, la l\u00f3gica de negocio entran en juego el t\u00e9rmino \u00abinyecci\u00f3n de dependencia\u00bb e \u00abinversi\u00f3n de control\u00bb.<\/p>\n<p>Inyecci\u00f3n de Dependencias (en ingl\u00e9s Dependency Injection, DI) es un patr\u00f3n de dise\u00f1o orientado a objetos, en el que se suministran objetos a una clase en lugar de ser la propia clase quien cree el objeto.<\/p>\n<p>Inversi\u00f3n de control (Inversion of Control en ingl\u00e9s, IoC) es un m\u00e9todo de programaci\u00f3n en el que el flujo de ejecuci\u00f3n de un programa se invierte respecto a los m\u00e9todos de programaci\u00f3n tradicionales, en los que la interacci\u00f3n se expresa de forma imperativa haciendo llamadas a procedimientos (procedure calls) o funciones. Tradicionalmente el programador especifica la secuencia de decisiones y procedimientos que pueden darse durante el ciclo de vida de un programa mediante llamadas a funciones. En su lugar, en la inversi\u00f3n de control se especifican respuestas deseadas a sucesos o solicitudes de datos concretas, dejando que alg\u00fan tipo de entidad o arquitectura externa lleve a cabo las acciones de control que se requieran en el orden necesario y para el conjunto de sucesos que tengan que ocurrir.<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone\" alt=\"\" src=\"http:\/\/www.compartimoss.com\/PublishingImages\/Numero17\/asp-net-mvp-para-sharepointeros-parte-iii\/figura1.png\" width=\"657\" height=\"376\" \/><\/p>\n<p>Un art\u00edculo muy interesante sobre inyecci\u00f3n de dependencias y entornos de SharePoint lo escribi\u00f3 el maestro <a href=\"https:\/\/twitter.com\/ekapic\" target=\"_blank\">Edin Kapic<\/a> para <a href=\"http:\/\/www.compartimoss.com\/revistas\/numero-17\/asp-net-mvc-para-sharepointeros-parte-iii\" target=\"_blank\">CompartiMOSS<\/a><br \/>\nEn nuestro FrameWork, por un lado, hemos implementado dos tipos de clase \u00abDatos\u00bb: por un lado una clase \u00abMock\u00bb y, por otro, una clase \u00abSharePointData\u00bb.<br \/>\nLa clase \u00abMock\u00bb es una clase que realiza operaciones ficticias sobre objetos de .NET. Para rellenar los datos hacemos uso de <a href=\"https:\/\/code.google.com\/p\/nbuilder\/\" target=\"_blank\">NBuilder <\/a>. La implementaci\u00f3n de un m\u00e9todo de la clase \u00abMock\u00bb es algo semejante a la siguiente:<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\n     public Status&lt;T&gt; Get(I id)\r\n        {\r\n            try\r\n            {\r\n                var dataReturn = new List&lt;T&gt;();\r\n                var item = _data&#x5B;Convert.ToInt32(id.ToString())];\r\n                var result = new Status&lt;T&gt;();\r\n                dataReturn.Add(item);\r\n                result.Data = dataReturn;\r\n                result.Success = true;\r\n                return result;\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                return new Status&lt;T&gt;\r\n                {\r\n                    Success = false,\r\n                    Error = new Error\r\n                    {\r\n                        Id = ex.HResult,\r\n                        Message = ex.Message,\r\n                        Code = 0\r\n                    }\r\n                };\r\n            }\r\n        }\r\n<\/pre>\n<p>Ahora bien, para la clase \u00abDataSharePoint\u00bb implementaremos un m\u00e9todo ya semejante pero con los artefactos propios de SharePoint. Un ejemplo seria el m\u00e9todo insert:<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\n        public int Insert(T data)\r\n        {\r\n            try\r\n            {\r\n                Web.AllowUnsafeUpdates = true;\r\n                var list = Web.Lists.TryGetList(Lista);\r\n                SPListItem item = list.AddItem();\r\n                var props = typeof(T).GetProperties();\r\n                foreach (var prop  in props )\r\n                {\r\n                    var valor = prop.GetValue(data);\r\n                    if (valor == null) continue;\r\n                    if (valor.GetType() == typeof(List&lt;string&gt;))\r\n                    {\r\n                        var listValor = (List&lt;string&gt;) valor;\r\n                        if (listValor.Count&gt;0) item&#x5B;prop.Name] = listValor&#x5B;0];\r\n                    }\r\n                    else\r\n                    {\r\n                        if (valor.ToString() != &quot;0&quot;) item&#x5B;prop.Name] = valor;\r\n                    }\r\n                }\r\n                item.Update();\r\n                return item.ID;\r\n            }\r\n            catch (Exception)\r\n            {\r\n                return -1;\r\n            }\r\n        }\r\n<\/pre>\n<p>Lo m\u00e1s interesante de este c\u00f3digo es que aprovechamos la potencia que tiene un lenguaje como C# para establecer unas reglas para facilitarnos la vida. Por un lado, hacemos un mapeo entre cada propiedad de la clase con un nombre interno de la lista, de esta forma podemos acceder al valor de este campo y cualquier modificaci\u00f3n en el modelo autom\u00e1ticamente se refleja en nuestras clases, con lo cual, tenemos todo centralizado en nuestro modelo de datos lo que nos ahorra mucho trabajo y hace nuestra aplicaci\u00f3n m\u00e1s robusta.<\/p>\n<h2>Conclusi\u00f3n<\/h2>\n<p>SharePoint no es una plataforma dif\u00edcil, el principal problema es que queremos aislar tanto SharePoint del resto de los ecosistemas de la organizaci\u00f3n, que nos hace trabajar de forma erronea. Para muestra de este fallo solamente hay que observar el Nuevo Modelo de Apps de SharePoint (en el que queremos incluir todas las Apps de nuestra organizaci\u00f3n en un entorno SharePoint). Trabajar en SharePoint no significa trabajar mal, sin ning\u00fan patr\u00f3n ni ninguna estrategia y con herramientas obsoletas. Trabajar con SharePoint es un gran reto y hay que conocer mucho la plataforma para poder potenciar los puntos fuertes de SharePoint (Gesti\u00f3n Documental, b\u00fasqueda, workflows) y minimizar los puntos d\u00e9biles (acceso a datos). Para plantear una buena soluci\u00f3n sobre SharePoint tenemos que tener una buena Arquitectura en la que se sustente nuestro desarrollo.<\/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>Generalmente, procesos \u00abnormales\u00bb en el desarrollo software (como son ALM, Test Unitarios, TDD e inyecciones de dependencias) son conceptos un tanto alejados de la realidad de muchos desarrolladores de SharePoint. \u00bfMotivos?\u00a0Si yo tengo que trabajar s\u00ed o s\u00ed con SharePoint &hellip; <a href=\"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/test-unitarios-inyecciones-de-dependencias-es-posible-en-sharepoint\/\">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":8,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[31,104,105],"class_list":["post-1262","post","type-post","status-publish","format-standard","hentry","category-buenas-practicas","tag-alm","tag-inyeccion-de-dependencias","tag-test-unitarios"],"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>Test Unitarios, Inyecciones de dependencias y ALM es posible en SharePoint - Desarrollando sobre SharePoint<\/title>\n<meta name=\"description\" content=\"En este articulo vamos a hablar sobre aspectos tabus en la fase de desarrollo de aplicaciones en SharePoint como son Test Unitarios, inyecciones de dependencias y ALM\" \/>\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\/desarrollandosobresharepoint\/test-unitarios-inyecciones-de-dependencias-es-posible-en-sharepoint\/\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"Test Unitarios, Inyecciones de dependencias y ALM es posible en SharePoint - Desarrollando sobre SharePoint\" \/>\n<meta name=\"twitter:description\" content=\"En este articulo vamos a hablar sobre aspectos tabus en la fase de desarrollo de aplicaciones en SharePoint como son Test Unitarios, inyecciones de dependencias y ALM\" \/>\n<meta name=\"twitter:image\" content=\"http:\/\/www.compartimoss.com\/PublishingImages\/Numero17\/asp-net-mvp-para-sharepointeros-parte-iii\/figura1.png\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Adri\u00e1n D\u00edaz\" \/>\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\\\/desarrollandosobresharepoint\\\/test-unitarios-inyecciones-de-dependencias-es-posible-en-sharepoint\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/test-unitarios-inyecciones-de-dependencias-es-posible-en-sharepoint\\\/\"},\"author\":{\"name\":\"Adri\u00e1n D\u00edaz\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/#\\\/schema\\\/person\\\/c9bfaede1bfba9564bb7f500788782bb\"},\"headline\":\"Test Unitarios, Inyecciones de dependencias y ALM es posible en SharePoint\",\"datePublished\":\"2014-04-15T10:30:20+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/test-unitarios-inyecciones-de-dependencias-es-posible-en-sharepoint\\\/\"},\"wordCount\":1261,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/test-unitarios-inyecciones-de-dependencias-es-posible-en-sharepoint\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/www.compartimoss.com\\\/PublishingImages\\\/Numero17\\\/asp-net-mvp-para-sharepointeros-parte-iii\\\/figura1.png\",\"keywords\":[\"alm\",\"inyeccion de dependencias\",\"test unitarios\"],\"articleSection\":[\"buenas practicas\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/test-unitarios-inyecciones-de-dependencias-es-posible-en-sharepoint\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/test-unitarios-inyecciones-de-dependencias-es-posible-en-sharepoint\\\/\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/test-unitarios-inyecciones-de-dependencias-es-posible-en-sharepoint\\\/\",\"name\":\"Test Unitarios, Inyecciones de dependencias y ALM es posible en SharePoint - Desarrollando sobre SharePoint\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/test-unitarios-inyecciones-de-dependencias-es-posible-en-sharepoint\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/test-unitarios-inyecciones-de-dependencias-es-posible-en-sharepoint\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/www.compartimoss.com\\\/PublishingImages\\\/Numero17\\\/asp-net-mvp-para-sharepointeros-parte-iii\\\/figura1.png\",\"datePublished\":\"2014-04-15T10:30:20+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/#\\\/schema\\\/person\\\/c9bfaede1bfba9564bb7f500788782bb\"},\"description\":\"En este articulo vamos a hablar sobre aspectos tabus en la fase de desarrollo de aplicaciones en SharePoint como son Test Unitarios, inyecciones de dependencias y ALM\",\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/test-unitarios-inyecciones-de-dependencias-es-posible-en-sharepoint\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/test-unitarios-inyecciones-de-dependencias-es-posible-en-sharepoint\\\/#primaryimage\",\"url\":\"http:\\\/\\\/www.compartimoss.com\\\/PublishingImages\\\/Numero17\\\/asp-net-mvp-para-sharepointeros-parte-iii\\\/figura1.png\",\"contentUrl\":\"http:\\\/\\\/www.compartimoss.com\\\/PublishingImages\\\/Numero17\\\/asp-net-mvp-para-sharepointeros-parte-iii\\\/figura1.png\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/#website\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/\",\"name\":\"Desarrollando sobre SharePoint\",\"description\":\"Arquitectura, buenas pr\u00e1cticas y desarrollo sobre la nueva herramienta de Microsoft SharePoint 2016\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/#\\\/schema\\\/person\\\/c9bfaede1bfba9564bb7f500788782bb\",\"name\":\"Adri\u00e1n D\u00edaz\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fe10b9eaf8ce4565ec75fba5a0d121c16186696e515cad2bedd42f6cf54e2007?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fe10b9eaf8ce4565ec75fba5a0d121c16186696e515cad2bedd42f6cf54e2007?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fe10b9eaf8ce4565ec75fba5a0d121c16186696e515cad2bedd42f6cf54e2007?s=96&d=mm&r=g\",\"caption\":\"Adri\u00e1n D\u00edaz\"},\"description\":\"Adri\u00e1n D\u00edaz es Ingeniero Inform\u00e1tico por la Universidad Polit\u00e9cnica de Valencia. Es MVP de Microsoft en la categor\u00eda Office Development desde 2014, MCPD de SharePoint 2010, Microsoft Active Profesional y Microsoft Comunity Contribuitor 2012. Cofundador del grupo de usuarios de SharePoint de Levante LevaPoint. Lleva desarrollando con tecnolog\u00edas Microsoft m\u00e1s de 10 a\u00f1os y desde hace 3 a\u00f1os est\u00e1 centrado en el desarrollo sobre SharePoint. Actualmente es Software &amp; Cloud Architect Lead en ENCAMINA.\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/author\\\/desarrollandosobresharepoint\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Test Unitarios, Inyecciones de dependencias y ALM es posible en SharePoint - Desarrollando sobre SharePoint","description":"En este articulo vamos a hablar sobre aspectos tabus en la fase de desarrollo de aplicaciones en SharePoint como son Test Unitarios, inyecciones de dependencias y ALM","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\/desarrollandosobresharepoint\/test-unitarios-inyecciones-de-dependencias-es-posible-en-sharepoint\/","twitter_card":"summary_large_image","twitter_title":"Test Unitarios, Inyecciones de dependencias y ALM es posible en SharePoint - Desarrollando sobre SharePoint","twitter_description":"En este articulo vamos a hablar sobre aspectos tabus en la fase de desarrollo de aplicaciones en SharePoint como son Test Unitarios, inyecciones de dependencias y ALM","twitter_image":"http:\/\/www.compartimoss.com\/PublishingImages\/Numero17\/asp-net-mvp-para-sharepointeros-parte-iii\/figura1.png","twitter_misc":{"Escrito por":"Adri\u00e1n D\u00edaz","Tiempo de lectura":"6 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/test-unitarios-inyecciones-de-dependencias-es-posible-en-sharepoint\/#article","isPartOf":{"@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/test-unitarios-inyecciones-de-dependencias-es-posible-en-sharepoint\/"},"author":{"name":"Adri\u00e1n D\u00edaz","@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/#\/schema\/person\/c9bfaede1bfba9564bb7f500788782bb"},"headline":"Test Unitarios, Inyecciones de dependencias y ALM es posible en SharePoint","datePublished":"2014-04-15T10:30:20+00:00","mainEntityOfPage":{"@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/test-unitarios-inyecciones-de-dependencias-es-posible-en-sharepoint\/"},"wordCount":1261,"commentCount":0,"image":{"@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/test-unitarios-inyecciones-de-dependencias-es-posible-en-sharepoint\/#primaryimage"},"thumbnailUrl":"http:\/\/www.compartimoss.com\/PublishingImages\/Numero17\/asp-net-mvp-para-sharepointeros-parte-iii\/figura1.png","keywords":["alm","inyeccion de dependencias","test unitarios"],"articleSection":["buenas practicas"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/test-unitarios-inyecciones-de-dependencias-es-posible-en-sharepoint\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/test-unitarios-inyecciones-de-dependencias-es-posible-en-sharepoint\/","url":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/test-unitarios-inyecciones-de-dependencias-es-posible-en-sharepoint\/","name":"Test Unitarios, Inyecciones de dependencias y ALM es posible en SharePoint - Desarrollando sobre SharePoint","isPartOf":{"@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/test-unitarios-inyecciones-de-dependencias-es-posible-en-sharepoint\/#primaryimage"},"image":{"@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/test-unitarios-inyecciones-de-dependencias-es-posible-en-sharepoint\/#primaryimage"},"thumbnailUrl":"http:\/\/www.compartimoss.com\/PublishingImages\/Numero17\/asp-net-mvp-para-sharepointeros-parte-iii\/figura1.png","datePublished":"2014-04-15T10:30:20+00:00","author":{"@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/#\/schema\/person\/c9bfaede1bfba9564bb7f500788782bb"},"description":"En este articulo vamos a hablar sobre aspectos tabus en la fase de desarrollo de aplicaciones en SharePoint como son Test Unitarios, inyecciones de dependencias y ALM","inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/test-unitarios-inyecciones-de-dependencias-es-posible-en-sharepoint\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/test-unitarios-inyecciones-de-dependencias-es-posible-en-sharepoint\/#primaryimage","url":"http:\/\/www.compartimoss.com\/PublishingImages\/Numero17\/asp-net-mvp-para-sharepointeros-parte-iii\/figura1.png","contentUrl":"http:\/\/www.compartimoss.com\/PublishingImages\/Numero17\/asp-net-mvp-para-sharepointeros-parte-iii\/figura1.png"},{"@type":"WebSite","@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/#website","url":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/","name":"Desarrollando sobre SharePoint","description":"Arquitectura, buenas pr\u00e1cticas y desarrollo sobre la nueva herramienta de Microsoft SharePoint 2016","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Person","@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/#\/schema\/person\/c9bfaede1bfba9564bb7f500788782bb","name":"Adri\u00e1n D\u00edaz","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/fe10b9eaf8ce4565ec75fba5a0d121c16186696e515cad2bedd42f6cf54e2007?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/fe10b9eaf8ce4565ec75fba5a0d121c16186696e515cad2bedd42f6cf54e2007?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/fe10b9eaf8ce4565ec75fba5a0d121c16186696e515cad2bedd42f6cf54e2007?s=96&d=mm&r=g","caption":"Adri\u00e1n D\u00edaz"},"description":"Adri\u00e1n D\u00edaz es Ingeniero Inform\u00e1tico por la Universidad Polit\u00e9cnica de Valencia. Es MVP de Microsoft en la categor\u00eda Office Development desde 2014, MCPD de SharePoint 2010, Microsoft Active Profesional y Microsoft Comunity Contribuitor 2012. Cofundador del grupo de usuarios de SharePoint de Levante LevaPoint. Lleva desarrollando con tecnolog\u00edas Microsoft m\u00e1s de 10 a\u00f1os y desde hace 3 a\u00f1os est\u00e1 centrado en el desarrollo sobre SharePoint. Actualmente es Software &amp; Cloud Architect Lead en ENCAMINA.","url":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/author\/desarrollandosobresharepoint\/"}]}},"_links":{"self":[{"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/posts\/1262","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/comments?post=1262"}],"version-history":[{"count":0,"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/posts\/1262\/revisions"}],"wp:attachment":[{"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/media?parent=1262"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/categories?post=1262"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/tags?post=1262"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}