{"id":3323,"date":"2020-06-26T09:00:03","date_gmt":"2020-06-26T07:00:03","guid":{"rendered":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/?p=3323"},"modified":"2020-06-25T13:06:39","modified_gmt":"2020-06-25T11:06:39","slug":"que-herramientas-usamos-para-hacer-test-de-integracion-en-dotnet","status":"publish","type":"post","link":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/que-herramientas-usamos-para-hacer-test-de-integracion-en-dotnet\/","title":{"rendered":"\u00bfQu\u00e9 herramientas usamos para hacer test de integraci\u00f3n en DotNet?"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3325\" src=\"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2020\/06\/qu\u00e9-herramientas-de-c\u00f3digo-usamos-en-dotnet.jpg\" alt=\"\" width=\"1099\" height=\"719\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2020\/06\/qu\u00e9-herramientas-de-c\u00f3digo-usamos-en-dotnet.jpg 1099w, https:\/\/encaminablogs.wpenginepowered.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2020\/06\/qu\u00e9-herramientas-de-c\u00f3digo-usamos-en-dotnet-300x196.jpg 300w, https:\/\/encaminablogs.wpenginepowered.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2020\/06\/qu\u00e9-herramientas-de-c\u00f3digo-usamos-en-dotnet-1024x670.jpg 1024w, https:\/\/encaminablogs.wpenginepowered.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2020\/06\/qu\u00e9-herramientas-de-c\u00f3digo-usamos-en-dotnet-768x502.jpg 768w, https:\/\/encaminablogs.wpenginepowered.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2020\/06\/qu\u00e9-herramientas-de-c\u00f3digo-usamos-en-dotnet-610x399.jpg 610w\" sizes=\"auto, (max-width: 1099px) 100vw, 1099px\" \/><\/p>\n<p>A la hora de empezar con los <strong>Test de Integraci\u00f3n<\/strong> tenemos varias formas de realizarlos. En este art\u00edculo os ense\u00f1ar\u00e9 las utilidades disponibles para hacer testing de integraci\u00f3n desde Visual Studio y con DotNet Core.<!--more--><\/p>\n<h1 id=\"qu\u00e9-entiendo-por-test-de-integraci\u00f3n\">\u00bfQu\u00e9 entiendo por Test de Integraci\u00f3n?<\/h1>\n<p>Seg\u00fan unas de las definiciones que nos encontramos por Internet, los test de integraci\u00f3n son aquellos que se realizan en el \u00e1mbito del desarrollo de software una vez se han aprobado las pruebas unitarias, y sirven para comprobar que todos los elementos unitarios que componen el software funcionan correctamente al probarlos en grupo.<\/p>\n<p>Partiendo de esta definici\u00f3n vamos a un escenario \u201ccom\u00fan\u201d. Este escenario ser\u00eda una API Rest en la cual queremos testear todos los endpoint. Por ejemplo, tenemos una API que nos devuelve todos nuestros Avengers favoritos tal y como se visualiza aqu\u00ed:<\/p>\n<p><div style=\"width: 380px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.theavenger.dev\/posts\/images\/tooling-testing\/Proyecto.PNG\" alt=\"Soluci\u00f3n Visual Studio\" width=\"370\" height=\"596\" \/><p class=\"wp-caption-text\">API que nos devuelve todos nuestros Avengers favoritos<\/p><\/div><\/p>\n<p>Antes de empezar con las herramientas vamos a descifrar qu\u00e9 elementos son los que tiene esta soluci\u00f3n y as\u00ed, podremos ver c\u00f3mo lo testearemos y qu\u00e9 herramienta usaremos. Recapitulando:<\/p>\n<ol>\n<li>Sistema de autenticaci\u00f3n contra el Azure Active Directory<\/li>\n<li>Base de Datos SQL Azure usando Entity Framework<\/li>\n<\/ol>\n<h2 id=\"que-debemos-de-testear-y-como-lo-debemos-de-testear\">\u00bfQu\u00e9 debemos testear y c\u00f3mo debemos hacerlo?<\/h2>\n<p>Para la parte del sistema de autenticaci\u00f3n, al final lo que debemos de cubrir en un test en el que alguien que no est\u00e9 autenticado cuando intente llamar a nuestra API, le d\u00e9 un c\u00f3digo 401 Unauthorized; y cuando est\u00e9 autenticado, que el token tenga la informaci\u00f3n necesaria para que nuestra aplicaci\u00f3n funcione. Por lo tanto, tendremos que tener \u00abalgo\u00bb que nos simule dicho comportamiento.<\/p>\n<p>Para ello, en primer lugar, .NET Core nos trae una herramienta <a href=\"https:\/\/www.nuget.org\/packages\/Microsoft.AspNetCore.TestHost\/\">Test Host<\/a> en la que desde un proyecto de Test podemos levantar nuestra aplicaci\u00f3n e indicarle en el StartUp la configuraci\u00f3n que vamos a lanzar desde el proyecto de Test. Aunque como veremos despu\u00e9s, en el c\u00f3digo es una librer\u00eda muy potente y que trae much\u00edsimas utilidades, para el tema de la seguridad deja al usuario la libertad de c\u00f3mo obtener los tokens JWT. Pues bien, hay una librer\u00eda <a href=\"https:\/\/github.com\/Xabaril\/Acheve.TestHost\">OpenSource Acheve<\/a>\u00a0implementada por\u00a0<a href=\"https:\/\/twitter.com\/hbiarge\">Hugo Biarge<\/a>\u00a0que nos facilita la vida.<\/p>\n<p>Ahora bien, para la segunda parte, el tema de la base de datos siempre es algo que hay que tener en cuenta. Si va a ser un test de integraci\u00f3n deberemos de ejecutarlo en una base de datos y no podremos mockearla. Por otra parte, estos Test \u00bfen qu\u00e9 momento se van a ejecutar o qui\u00e9n los van a ejecutar? Dependiendo de las contestaciones tenemos varias alternativas, todas v\u00e1lidas<\/p>\n<ul>\n<li>Hacer uso de una base de datos InMemory. Su principal beneficio es que no tiene coste. Es r\u00e1pida de montar pero, por contra, hay determinadas acciones en las que no se comporta como una base de datos real.<\/li>\n<li>Levantar una base de datos en un contenedor (Docker). Aqu\u00ed su principal ventaja es que el comportamiento exactamente igual que la base de datos, pero su principal inconveniente es que si lo montamos en una Build, hay que sumar el tiempo de levantar el docker a la duraci\u00f3n de la Build y dependiendo de qu\u00e9 escenarios, puede ser un<em> stoper.<\/em><\/li>\n<li>Utilizar una base de datos \u201creal\u201d y usar alguna herramienta que nos deje la base de datos tal y como estaba inicialmente (si est\u00e1is interesados en esta opci\u00f3n no me perder\u00eda la sesi\u00f3n que imparti\u00f3 <a href=\"https:\/\/twitter.com\/nfanjul\">Nacho Fanjul<\/a>\u00a0en la\u00a0<a href=\"https:\/\/youtu.be\/bOF09zlOPoM\">NetCoreConf).<\/a><\/li>\n<\/ul>\n<h1 id=\"show-me-the-code\">Show me the Code<\/h1>\n<p>Una vez realizadas las aclaraciones sobre c\u00f3mo vamos a librar algunos inconvenientes a la hora de realizar los Test, centr\u00e9monos en lo importante en el Test y c\u00f3mo implementarlo.<\/p>\n<h2 id=\"xunit\">XUnit<\/h2>\n<p>La herramienta para realizarlos es xUnit, atr\u00e1s han quedado los tiempos de MS-Test y .NET Core. XUnit nos proporciona una librer\u00eda de Test que si se utiliza correctamente es bastante potente.<\/p>\n<p>En primer lugar, vamos a crear nuestro servidor de Test. Para ello tendremos que crear un Startup que ser\u00e1 el punto de arranque.<\/p>\n<p>Creamos un arranque que herede el StartUp que tenemos en la API y en dicho arranque,\u00a0 sobreescribimos los m\u00e9todos que vamos a realizar en los test.<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-csharp\" data-lang=\"csharp\">public class TestStartup : Startup\r\n   {\r\n       public TestStartup(IConfiguration configuration, IWebHostEnvironment environment) : base(configuration, environment)\r\n       {\r\n       }\r\n   }\r\n<\/code><\/pre>\n<\/div>\n<p>Tal y como tenemos montado el StartUp tenemos un m\u00e9todo donde Configuramos la Autenticaci\u00f3n y ahora para el test lo que vamos a realizar es indicarle que coja un esquema que est\u00e1 dentro del Test Server (en lugar del esquema que tenemos puesto en la API ).<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-csharp\" data-lang=\"csharp\">        protected override void ConfigureAuthentication(IServiceCollection services)\r\n       {\r\n           services.AddMvc().AddApplicationPart(typeof(AvengerController).Assembly);\r\n           services.AddAuthentication(options =&gt;\r\n           {\r\n               options.DefaultScheme = TestServerDefaults.AuthenticationScheme;\r\n           })\r\n           .AddTestServer();\r\n       }\r\n<\/code><\/pre>\n<\/div>\n<p>El c\u00f3digo expuesto no tiene mucho misterio, solo la primera l\u00ednea. Esto lo que har\u00e1 es que cuando realicemos una petici\u00f3n usando el TestServer, podamos invocar directamente a la clase del controlador en lugar de a la url que se levanta.<\/p>\n<p>Una vez tenemos resuelto el tema de la autenticaci\u00f3n, vamos con la parte de la base de datos. En este caso vamos a utilizar un SQLLite que se genera en memoria. Para ello pondremos el siguiente c\u00f3digo:<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-csharp\" data-lang=\"csharp\">   protected override void ConfigureBD(IServiceCollection services)\r\n       {\r\n           var connectionStringBuilder = new SqliteConnectionStringBuilder { DataSource = \":memory:\" };\r\n           var connectionString = connectionStringBuilder.ToString();\r\n           var connection = new SqliteConnection(connectionString);\r\n           services\r\n             .AddEntityFrameworkSqlite()\r\n             .AddDbContext&lt;AppDbContext&gt;(\r\n               options =&gt; options.UseSqlite(connection)\r\n             );\r\n       }\r\n<\/code><\/pre>\n<\/div>\n<p>Vale, la base de datos ya la tenemos in Memory, pero muchas veces, de cara a los test, es interesante que tengamos datos ya cargados de pruebas. Para ello, vamos a hacer uso de <a href=\"https:\/\/github.com\/bchavez\/Bogus\">Bogus,\u00a0<\/a> una librer\u00eda que nos permite multitud de opciones para crear datos de test o de pruebas muy \u00fatiles. Para ello, en el mismo m\u00e9todo a\u00f1adimos la siguiente funcionalidad para insertar los datos (se podr\u00eda usar el Seed propio de EF pero si es algo que no lo vamos a tener en el c\u00f3digo de producci\u00f3n, a m\u00ed personalmente me gusta m\u00e1s separarlo por dejarlo m\u00e1s limpito):<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-csharp\" data-lang=\"csharp\">var serviceProvider = services.BuildServiceProvider();\r\nvar storeContext = serviceProvider.GetRequiredService&lt;AppDbContext&gt;();\r\n   storeContext.Database.OpenConnection(); \r\n   storeContext.Database.EnsureCreated();\r\n   storeContext.Database.Migrate();\r\n   if (!storeContext.Avenger.Any())\r\n   {\r\n       var avengerList = new Faker&lt;Avenger&gt;().Generate(10);\r\n       storeContext.AddRange(avengerList);                              \r\n       storeContext.SaveChanges();\r\n       }\r\n<\/code><\/pre>\n<\/div>\n<p>Una de las cosas m\u00e1s chulas que tiene xUnit es la posibilidad de<strong> inyectar a tus pruebas un estado previo<\/strong> en el que se encuentra. Esto podr\u00edamos decir que es el TestFixture. Creamos un TestFixture en el que ponemos el Test de Pruebas y tambi\u00e9n aquellos aspectos que ser\u00e1n necesarios para los test. En este caso, yo me he creado una Claim que ser\u00e1 la que utilice para la autenticaci\u00f3n.<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-csharp\" data-lang=\"csharp\">   public class TestFixture : IDisposable\r\n   {\r\n       public TestServer TestServer { get; private set; }\r\n       public HttpClient Client { get; private set; }\r\n       public string TenantIdClaimType =&gt; \"http:\/\/schemas.microsoft.com\/identity\/claims\/tenantid\";        \r\n\r\n       public List&lt;Claim&gt; DefaultIdentity\r\n       {\r\n           get\r\n           {\r\n               return new List&lt;Claim&gt;()\r\n               {\r\n                   new Claim(ClaimTypes.Name, \"Hulk\"),\r\n                   new Claim(TenantIdClaimType, \"3ab8g5de-32c5-3134-zfdarf-182a67a344\"),\r\n                   new Claim(ClaimTypes.Upn, \"hulk@theavenger.com\")\r\n               };\r\n           }\r\n       }\r\n       public TestFixture()\r\n       {\r\n           CreateServer();\r\n       }\r\n       private void CreateServer()\r\n       {\r\n           var path = Assembly.GetAssembly(typeof(TestFixture))\r\n               .Location;\r\n\r\n           Log.Logger = new LoggerConfiguration()\r\n               .MinimumLevel.Verbose()\r\n               .MinimumLevel.Override(\"Microsoft\", LogEventLevel.Information)\r\n               .Enrich.FromLogContext()\r\n               .WriteTo.Console()\r\n               .CreateLogger();\r\n\r\n           var hostBuilder = new WebHostBuilder()\r\n               .UseContentRoot(Path.GetDirectoryName(path))\r\n               .ConfigureServices(services=&gt;\r\n               {\r\n                   services.AddAutofac();\r\n               })                \r\n               .UseSerilog()\r\n               .ConfigureAppConfiguration(cb =&gt;\r\n               {\r\n                   cb.AddJsonFile(\"appsettings.json\", optional: false)\r\n                   .AddEnvironmentVariables();\r\n               })\r\n               .UseStartup&lt;TestStartup&gt;();            \r\n           this.TestServer = new TestServer(hostBuilder);\r\n           this.Client = TestServer.CreateClient();\r\n       }\r\n\r\n       public void Dispose()\r\n       {\r\n           if (Client != null)\r\n           {\r\n               Client.Dispose();\r\n           }\r\n           if (TestServer != null)\r\n           {\r\n               TestServer.Dispose();\r\n           }\r\n       }\r\n   }\r\n<\/code><\/pre>\n<\/div>\n<p>Una vez ya tenemos creado el TestServer y el TestFixture, vamos a lo que realmente importa los Test. En primer lugar y por convenci\u00f3n, a cada uno de los controladores de nuestra API que vamos a testear los llamaremos <strong>escenarios<\/strong>. Nos creamos una clase en la que le inyectemos la Fixture. Para ello tendremos algo similar al siguiente c\u00f3digo:<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-csharp\" data-lang=\"csharp\">    [Trait(\"Category\", \"Integration\")]\r\n    public class AvengerScenarios : IClassFixture&lt;TestFixture&gt;\r\n    {\r\n        private readonly TestFixture fixture;\r\n\r\n        public AvengerScenarios(TestFixture fixture)\r\n        {\r\n            this.fixture = fixture;            \r\n        }\r\n\r\n    }\r\n<\/code><\/pre>\n<\/div>\n<p>Luego implementaremos el Test. Por ejemplo, vamos a testear que el m\u00e9todo que nos devuelve a todos los Avengers. Tenemos que asegurarnos que est\u00e1 autenticado, para lo cual usaremos el m\u00e9todo WithIdentity que nos proporciona Acheve. M\u00e1s tard, usaremos la librer\u00eda <a href=\"https:\/\/fluentassertions.com\/\">Fluent Assertions.<\/a> El principal motivo es por la legibilidad de los test, ya que los hace mucho m\u00e1s similares al lenguaje humano.<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-csharp\" data-lang=\"csharp\">      [Fact]\r\n        public async Task Get_AllAvengers_returnOk()\r\n        {\r\n            var response = await fixture.TestServer\r\n                .CreateHttpApiRequest&lt;AvengerController&gt;(controller =&gt; controller.Get())\r\n                .WithIdentity(fixture.DefaultIdentity)\r\n                .GetAsync();\r\n            response.StatusCode.Should().Be(HttpStatusCode.OK);\r\n        }\r\n<\/code><\/pre>\n<\/div>\n<h1 id=\"resumen\">Resumen<\/h1>\n<p>En este articulo hemos visto el Tooling de herramienta que utilizo para los Test de Integraci\u00f3n.<\/p>\n<p><strong>Acheve.TestHost<\/strong>\u00a0<strong>Bogus<\/strong>\u00a0<strong>FluenAsserttions<\/strong>\u00a0<strong>Microsoft.AspNetCore.TestHost<\/strong>\u00a0<strong>Microsoft.EntityFramewokcore.SQlite<\/strong>\u00a0<strong>Microsoft.EntityFramewokcore.InMemory<\/strong>\u00a0<strong>xUnit<\/strong><\/p>\n<p>Este tipo de Test tambi\u00e9n se pueden hacer con herramientas como Postman, sin embargo, yo creo que desde Visual Studio (y tal y como esta planteada esta forma), nos aporta suficiente valor, por ejemplo, cuando se cambia de m\u00e9todo el controlador el Test directamente no compila. En cambio, si lo lanzamos desde un Postman, la primera vez que lo lancemos nos devolver\u00e1 un BadRequest, y es un tiempo de cambio y de rehacer el test, que no es tan f\u00e1cil.<\/p>\n<p>Junto con estas herramientas hay alguna otra herramienta como Moq.Net, o Coverlet que tambi\u00e9n utilizamos para otro tipo de Test o para obtener el porcentaje de cobertura de nuestros Test. Pero como muchas veces digo, el porcentaje no es algo que me importe, sino m\u00e1s bien que tengamos testeadas las partes core de la aplicaci\u00f3n.<\/p>\n<p>\u00bfY vosotros cu\u00e1l utiliz\u00e1is? \u00bfCu\u00e1l echas de menos?<\/p>\n<p>Happy Codding<\/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>A la hora de empezar con los Test de Integraci\u00f3n tenemos varias formas de realizarlos. En este art\u00edculo os ense\u00f1ar\u00e9 las utilidades disponibles para hacer testing de integraci\u00f3n desde Visual Studio y con DotNet Core.<!-- 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":3325,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-3323","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desarrollo"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v18.2.1 (Yoast SEO v28.7) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>\u00bfQu\u00e9 herramientas usamos para hacer test de integraci\u00f3n en DotNet? | ENCAMINA<\/title>\n<meta name=\"description\" content=\"En este art\u00edculo, Adri\u00e1n D\u00edaz nos habla del Tooling de herramientas que utiliza para los Test de Integraci\u00f3n.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.theavenger.dev\/posts\/tooling-testing-integration-dotnet\/\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"\u00bfQu\u00e9 herramientas usamos para hacer test de integraci\u00f3n en DotNet? | ENCAMINA\" \/>\n<meta name=\"twitter:description\" content=\"En este art\u00edculo, Adri\u00e1n D\u00edaz nos habla del Tooling de herramientas que utiliza para los Test de Integraci\u00f3n.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2020\/06\/qu\u00e9-herramientas-de-c\u00f3digo-usamos-en-dotnet.jpg\" \/>\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=\"8 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.theavenger.dev\\\/posts\\\/tooling-testing-integration-dotnet\\\/#article\",\"isPartOf\":{\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/que-herramientas-usamos-para-hacer-test-de-integracion-en-dotnet\\\/\"},\"author\":{\"name\":\"Adri\u00e1n D\u00edaz\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/#\\\/schema\\\/person\\\/c9bfaede1bfba9564bb7f500788782bb\"},\"headline\":\"\u00bfQu\u00e9 herramientas usamos para hacer test de integraci\u00f3n en DotNet?\",\"datePublished\":\"2020-06-26T07:00:03+00:00\",\"mainEntityOfPage\":{\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/que-herramientas-usamos-para-hacer-test-de-integracion-en-dotnet\\\/\"},\"wordCount\":1360,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/www.theavenger.dev\\\/posts\\\/tooling-testing-integration-dotnet\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2020\\\/06\\\/qu\u00e9-herramientas-de-c\u00f3digo-usamos-en-dotnet.jpg\",\"articleSection\":[\"desarrollo\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.theavenger.dev\\\/posts\\\/tooling-testing-integration-dotnet\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/que-herramientas-usamos-para-hacer-test-de-integracion-en-dotnet\\\/\",\"url\":\"https:\\\/\\\/www.theavenger.dev\\\/posts\\\/tooling-testing-integration-dotnet\\\/\",\"name\":\"\u00bfQu\u00e9 herramientas usamos para hacer test de integraci\u00f3n en DotNet? | ENCAMINA\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.theavenger.dev\\\/posts\\\/tooling-testing-integration-dotnet\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.theavenger.dev\\\/posts\\\/tooling-testing-integration-dotnet\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2020\\\/06\\\/qu\u00e9-herramientas-de-c\u00f3digo-usamos-en-dotnet.jpg\",\"datePublished\":\"2020-06-26T07:00:03+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/#\\\/schema\\\/person\\\/c9bfaede1bfba9564bb7f500788782bb\"},\"description\":\"En este art\u00edculo, Adri\u00e1n D\u00edaz nos habla del Tooling de herramientas que utiliza para los Test de Integraci\u00f3n.\",\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.theavenger.dev\\\/posts\\\/tooling-testing-integration-dotnet\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.theavenger.dev\\\/posts\\\/tooling-testing-integration-dotnet\\\/#primaryimage\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2020\\\/06\\\/qu\u00e9-herramientas-de-c\u00f3digo-usamos-en-dotnet.jpg\",\"contentUrl\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2020\\\/06\\\/qu\u00e9-herramientas-de-c\u00f3digo-usamos-en-dotnet.jpg\",\"width\":1099,\"height\":719},{\"@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":"\u00bfQu\u00e9 herramientas usamos para hacer test de integraci\u00f3n en DotNet? | ENCAMINA","description":"En este art\u00edculo, Adri\u00e1n D\u00edaz nos habla del Tooling de herramientas que utiliza para los Test de Integraci\u00f3n.","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:\/\/www.theavenger.dev\/posts\/tooling-testing-integration-dotnet\/","twitter_card":"summary_large_image","twitter_title":"\u00bfQu\u00e9 herramientas usamos para hacer test de integraci\u00f3n en DotNet? | ENCAMINA","twitter_description":"En este art\u00edculo, Adri\u00e1n D\u00edaz nos habla del Tooling de herramientas que utiliza para los Test de Integraci\u00f3n.","twitter_image":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2020\/06\/qu\u00e9-herramientas-de-c\u00f3digo-usamos-en-dotnet.jpg","twitter_misc":{"Escrito por":"Adri\u00e1n D\u00edaz","Tiempo de lectura":"8 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.theavenger.dev\/posts\/tooling-testing-integration-dotnet\/#article","isPartOf":{"@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/que-herramientas-usamos-para-hacer-test-de-integracion-en-dotnet\/"},"author":{"name":"Adri\u00e1n D\u00edaz","@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/#\/schema\/person\/c9bfaede1bfba9564bb7f500788782bb"},"headline":"\u00bfQu\u00e9 herramientas usamos para hacer test de integraci\u00f3n en DotNet?","datePublished":"2020-06-26T07:00:03+00:00","mainEntityOfPage":{"@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/que-herramientas-usamos-para-hacer-test-de-integracion-en-dotnet\/"},"wordCount":1360,"commentCount":0,"image":{"@id":"https:\/\/www.theavenger.dev\/posts\/tooling-testing-integration-dotnet\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2020\/06\/qu\u00e9-herramientas-de-c\u00f3digo-usamos-en-dotnet.jpg","articleSection":["desarrollo"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.theavenger.dev\/posts\/tooling-testing-integration-dotnet\/#respond"]}]},{"@type":"WebPage","@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/que-herramientas-usamos-para-hacer-test-de-integracion-en-dotnet\/","url":"https:\/\/www.theavenger.dev\/posts\/tooling-testing-integration-dotnet\/","name":"\u00bfQu\u00e9 herramientas usamos para hacer test de integraci\u00f3n en DotNet? | ENCAMINA","isPartOf":{"@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.theavenger.dev\/posts\/tooling-testing-integration-dotnet\/#primaryimage"},"image":{"@id":"https:\/\/www.theavenger.dev\/posts\/tooling-testing-integration-dotnet\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2020\/06\/qu\u00e9-herramientas-de-c\u00f3digo-usamos-en-dotnet.jpg","datePublished":"2020-06-26T07:00:03+00:00","author":{"@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/#\/schema\/person\/c9bfaede1bfba9564bb7f500788782bb"},"description":"En este art\u00edculo, Adri\u00e1n D\u00edaz nos habla del Tooling de herramientas que utiliza para los Test de Integraci\u00f3n.","inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.theavenger.dev\/posts\/tooling-testing-integration-dotnet\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.theavenger.dev\/posts\/tooling-testing-integration-dotnet\/#primaryimage","url":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2020\/06\/qu\u00e9-herramientas-de-c\u00f3digo-usamos-en-dotnet.jpg","contentUrl":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-content\/uploads\/sites\/8\/2020\/06\/qu\u00e9-herramientas-de-c\u00f3digo-usamos-en-dotnet.jpg","width":1099,"height":719},{"@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\/3323","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=3323"}],"version-history":[{"count":0,"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/posts\/3323\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/media\/3325"}],"wp:attachment":[{"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/media?parent=3323"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/categories?post=3323"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/tags?post=3323"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}