{"id":2496,"date":"2017-01-17T23:16:37","date_gmt":"2017-01-17T23:16:37","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=2496"},"modified":"2025-06-13T23:03:39","modified_gmt":"2025-06-14T06:03:39","slug":"testing-spring-data-couchbase-applications-with-testcontainers","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/testing-spring-data-couchbase-applications-with-testcontainers\/","title":{"rendered":"Prueba de aplicaciones Spring Data Couchbase con TestContainers"},"content":{"rendered":"<p style=\"padding-top: 0.66001rem;margin-bottom: 1.33999rem;color: #373d49;font-family: Georgia, Cambria, serif;font-size: 14px;text-align: start\">En un <a href=\"\/blog\/es\/create-couchbase-docker-images-testcontainers\/\">anterior<\/a> <a href=\"\/blog\/es\/configure-official-couchbase-docker-test\/\">serie<\/a> <a href=\"\/blog\/es\/unit-integration-tests-couchbase-docker-container\/\">de entradas de blog<\/a> Expliqu\u00e9 c\u00f3mo usar TestContainers para tus pruebas Junit de Java. Algunos de los temas que no abordamos fueron acerca de c\u00f3mo probar N1QL, crear tus propios buckets, \u00edndice etc... Este post ser\u00e1 sobre la construcci\u00f3n de... <a href=\"https:\/\/docs.couchbase.com\/sdk-extensions\/spring-data-couchbase.html\">Spring Data Couchbase<\/a> casos de prueba y cubrir esas cuestiones que dejamos fuera.<\/p>\n<h2>Puerto no configurable por cable<\/h2>\n<p style=\"padding-top: 0.66001rem;margin-bottom: 1.33999rem;color: #373d49;font-family: Georgia, Cambria, serif;font-size: 14px;text-align: start\">Una de las limitaciones que tenemos actualmente en Couchbase Server es que no se puede cambiar algunos de los puertos por defecto. Esto es un problema con Docker ya que es cambiar los puertos s\u00f3lo se notifica lo contrario. Esto puede ser genial porque significa que puedes tener varias instancias de Couchbase corriendo en la misma m\u00e1quina. Pero desafortunadamente no funcionar\u00e1 as\u00ed que algunos puertos tendr\u00e1n que ser arreglados. Esto puede ser declarado bastante f\u00e1cilmente con TestContainers usando el m\u00e9todo addFixedExposedPort.<\/p>\n<pre><code style=\"color: inherit;background-color: transparent;padding: 0px;font-size: inherit\">    @Override\r\n    protected void configure() {\r\n        addExposedPorts(8091, 11207, 11210, 11211, 18091, 18092, 18093);\r\n        addFixedExposedPort(8092, 8092);\r\n        addFixedExposedPort(8093, 8093);\r\n        addFixedExposedPort(8094, 8094);\r\n        addFixedExposedPort(8095, 8095);\r\n        setWaitStrategy(new HttpWaitStrategy().forPath(\"\/ui\/index.html#\/\"));\r\n    }\r\n<\/code><\/pre>\n<p style=\"padding-top: 0.66001rem;margin-bottom: 1.33999rem;color: #373d49;font-family: Georgia, Cambria, serif;font-size: 14px;text-align: start\">Con eso fuera del camino, nuestro Java SDK ser\u00e1 capaz de conectarse a N1QL.<\/p>\n<h2>Caso de prueba abstracto de Spring Data Couchbase Docker<\/h2>\n<p style=\"padding-top: 0.66001rem;margin-bottom: 1.33999rem;color: #373d49;font-family: Georgia, Cambria, serif;font-size: 14px;text-align: start\">El objetivo aqu\u00ed es crear un caso de prueba abstracto que ser\u00e1 utilizado por cualquier clase que necesite una instancia de Couchbase y Spring Data Couchbase configurado. Se empieza como en los posts anteriores instanciando un campo CouchbaseContainer. Como estamos probando Spring Data configuramos el soporte para Index, Query y a\u00f1adimos FTS para m\u00e1s adelante.<\/p>\n<p style=\"padding-top: 0.66001rem;margin-bottom: 1.33999rem;color: #373d49;font-family: Georgia, Cambria, serif;font-size: 14px;text-align: start\">Para asegurarse de que esta clase ejecutar\u00e1 las pruebas de su aplicaci\u00f3n, a\u00f1ada el par\u00e1metro\u00a0<code style=\"color: #c7254e;background-color: #f9f2f4;padding: 2px 4px\">@RunWith(SpringRunner.class)<\/code>\u00a0anotaci\u00f3n. Y para asegurarte de que la configuraci\u00f3n de tu aplicaci\u00f3n se prueba tan bien como nuestra configuraci\u00f3n personalizada, a\u00f1ade\u00a0<code style=\"color: #c7254e;background-color: #f9f2f4;padding: 2px 4px\">@SpringBootTest(classes = {GittalentBackendApplication.class, AbstractSPDataTestConfig.CouchbaseTestConfig.class})<\/code>.<\/p>\n<p style=\"padding-top: 0.66001rem;margin-bottom: 1.33999rem;color: #373d49;font-family: Georgia, Cambria, serif;font-size: 14px;text-align: start\">Ahora hablando de configuraci\u00f3n personalizada, \u00bfqu\u00e9 necesitamos? Queremos anular la configuraci\u00f3n por defecto de Couchbase de la aplicaci\u00f3n. Para ello necesitamos implementar un CouchbaseConfigurer. Esta interfaz define todos los bean necesarios para que Spring Data Couchbase funcione correctamente. Proporciona instancias para CouchbaseEnvironment, ClusterInfo, Cluster y Bucket.<\/p>\n<p style=\"padding-top: 0.66001rem;margin-bottom: 1.33999rem;color: #373d49;font-family: Georgia, Cambria, serif;font-size: 14px;text-align: start\">Todos ellos provendr\u00e1n de nuestra configuraci\u00f3n de CouchbaseContainer antes de ejecutar las pruebas. As\u00ed que tenemos que asegurarnos de que el Contenedor est\u00e1 funcionando y listo antes de inicializar todos los beans. Esto se puede conseguir a\u00f1adiendo un m\u00e9todo init() anotado con @PostConstruct. Esto nos permitir\u00e1 primero asegurarnos de que el contenedor se est\u00e1 ejecutando, y luego configurar cosas adicionales. En el siguiente ejemplo configuramos un cubo llamado default y configuramos el tipo de \u00edndice para que sea MOI.<\/p>\n<pre><code style=\"color: inherit;background-color: transparent;padding: 0px;font-size: inherit\">@RunWith(SpringRunner.class)\r\n@SpringBootTest(classes = {GittalentBackendApplication.class, AbstractSPDataTestConfig.CouchbaseTestConfig.class})\r\npublic abstract class AbstractSPDataTestConfig {\r\n\r\n    public static final String clusterUser = \"Administrator\";\r\n    public static final String clusterPassword = \"password\";\r\n\r\n    @ClassRule\r\n    public static CouchbaseContainer couchbaseContainer = new CouchbaseContainer()\r\n            .withFTS(true)\r\n            .withIndex(true)\r\n            .withQuery(true)\r\n            .withClusterUsername(clusterUser)\r\n            .withClusterPassword(clusterPassword);\r\n\r\n    @Configuration\r\n    static class CouchbaseTestConfig implements CouchbaseConfigurer {\r\n\r\n        private CouchbaseContainer couchbaseContainer;\r\n\r\n        @PostConstruct\r\n        public void init() throws Exception {\r\n            couchbaseContainer = AbstractSPDataTestConfig.couchbaseContainer;\r\n            BucketSettings settings = DefaultBucketSettings.builder()\r\n                    .enableFlush(true).name(\"default\").quota(100).replicas(0).type(BucketType.COUCHBASE).build();\r\n            settings =  couchbaseCluster().clusterManager(clusterUser, clusterPassword).insertBucket(settings);\r\n            couchbaseContainer.callCouchbaseRestAPI(\"\/settings\/indexes\", \"indexerThreads=0&amp;logLevel=info&amp;maxRollbackPoints=5&amp;storageMode=memory_optimized\", \"Administrator\", \"password\");\r\n            waitForContainer();\r\n        }\r\n\r\n        public void waitForContainer(){\r\n            CouchbaseWaitStrategy s = new CouchbaseWaitStrategy();\r\n            s.withBasicCredentials(clusterUser, clusterPassword);\r\n            s.waitUntilReady(couchbaseContainer);\r\n        }\r\n\r\n        @Override\r\n        @Bean\r\n        public CouchbaseEnvironment couchbaseEnvironment() {\r\n            return couchbaseContainer.getCouchbaseEnvironnement();\r\n        }\r\n\r\n        @Override\r\n        @Bean\r\n        public Cluster couchbaseCluster() throws Exception {\r\n            return couchbaseContainer.geCouchbaseCluster();\r\n        }\r\n\r\n        @Override\r\n        @Bean\r\n        public ClusterInfo couchbaseClusterInfo() throws Exception {\r\n            Cluster cc = couchbaseCluster();\r\n            ClusterManager manager = cc.clusterManager(clusterUser, clusterPassword);\r\n            return manager.info();\r\n        }\r\n\r\n        @Override\r\n        @Bean\r\n        public Bucket couchbaseClient() throws Exception {\r\n            return couchbaseContainer.geCouchbaseCluster().openBucket(\"default\");\r\n        }\r\n\r\n    }\r\n}\r\n<\/code><\/pre>\n<p style=\"padding-top: 0.66001rem;margin-bottom: 1.33999rem;color: #373d49;font-family: Georgia, Cambria, serif;font-size: 14px;text-align: start\">Una vez que tenemos este caso de prueba abstracto, todo lo que tenemos que hacer es crear una clase que lo extienda y empezar a escribir pruebas. Aqu\u00ed podemos inyectar Servicios de nuestra aplicaci\u00f3n as\u00ed como un Bucket de nivel inferior. Lo que ves en este test es primero una llamada a un servicio importador que crea documentos. Luego creamos un \u00edndice en el bucket por defecto y probamos una consulta en \u00e9l.<\/p>\n<pre><code style=\"color: inherit;background-color: transparent;padding: 0px;font-size: inherit\">public class GitTalentGHImportTests extends AbstractSPDataTestConfig {\r\n\r\n    @Autowired\r\n    private GithubImportService githubImportService;\r\n\r\n    @Autowired\r\n    private Bucket bucket;\r\n\r\n    @Test\r\n    public void importDevAdvocateTeam(){\r\n        githubImportService.importOneDeveloper(\"ldoguin\");\r\n        N1qlQueryResult result = bucket.query(N1qlQuery.simple(\"CREATE PRIMARY INDEX ON default\"));\r\n        N1qlQuery query = N1qlQuery.simple(\"SELECT * FROM default WHERE developerInfo.username = 'ldoguin'\");\r\n        result = bucket.query(query);\r\n        N1qlQueryRow row = result.rows().next();\r\n        Assert.assertNotNull(row);\r\n    }\r\n}\r\n<\/code><\/pre>\n<p style=\"padding-top: 0.66001rem;margin-bottom: 1.33999rem;color: #373d49;font-family: Georgia, Cambria, serif;font-size: 14px;text-align: start\">Como se puede ver una vez creado el caso de prueba Abstracto, la cantidad de c\u00f3digo es realmente m\u00ednima y corresponde exactamente a lo que se quiere probar.<\/p>","protected":false},"excerpt":{"rendered":"<p>In a previous series of blog posts I explained how to use TestContainers for your Java Junit tests. Some of the issues we did not address were about how to test N1QL, create your own buckets, index etc\u2026 This post [&hellip;]<\/p>","protected":false},"author":49,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1818],"tags":[1877],"ppma_author":[9023],"class_list":["post-2496","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-java","tag-testing"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.9 (Yoast SEO v25.9) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Using TestContainers for Spring Data Couchbase Applications<\/title>\n<meta name=\"description\" content=\"Find out how to use TestContainers. This Couchbase post will be about building Spring Data Couchbase test cases and cover an array of questions.\" \/>\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.couchbase.com\/blog\/es\/testing-spring-data-couchbase-applications-with-testcontainers\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Testing Spring Data Couchbase Applications with TestContainers\" \/>\n<meta property=\"og:description\" content=\"Find out how to use TestContainers. This Couchbase post will be about building Spring Data Couchbase test cases and cover an array of questions.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/testing-spring-data-couchbase-applications-with-testcontainers\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-01-17T23:16:37+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T06:03:39+00:00\" \/>\n<meta name=\"author\" content=\"Laurent Doguin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@ldoguin\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"unstructured.io\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/testing-spring-data-couchbase-applications-with-testcontainers\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/testing-spring-data-couchbase-applications-with-testcontainers\/\"},\"author\":{\"name\":\"Laurent Doguin\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c0aa9b8f1ed51b7a9e2f7cb755994a5e\"},\"headline\":\"Testing Spring Data Couchbase Applications with TestContainers\",\"datePublished\":\"2017-01-17T23:16:37+00:00\",\"dateModified\":\"2025-06-14T06:03:39+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/testing-spring-data-couchbase-applications-with-testcontainers\/\"},\"wordCount\":483,\"commentCount\":2,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/testing-spring-data-couchbase-applications-with-testcontainers\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"keywords\":[\"testing\"],\"articleSection\":[\"Java\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/testing-spring-data-couchbase-applications-with-testcontainers\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/testing-spring-data-couchbase-applications-with-testcontainers\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/testing-spring-data-couchbase-applications-with-testcontainers\/\",\"name\":\"Using TestContainers for Spring Data Couchbase Applications\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/testing-spring-data-couchbase-applications-with-testcontainers\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/testing-spring-data-couchbase-applications-with-testcontainers\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2017-01-17T23:16:37+00:00\",\"dateModified\":\"2025-06-14T06:03:39+00:00\",\"description\":\"Find out how to use TestContainers. This Couchbase post will be about building Spring Data Couchbase test cases and cover an array of questions.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/testing-spring-data-couchbase-applications-with-testcontainers\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/testing-spring-data-couchbase-applications-with-testcontainers\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/testing-spring-data-couchbase-applications-with-testcontainers\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/testing-spring-data-couchbase-applications-with-testcontainers\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Testing Spring Data Couchbase Applications with TestContainers\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c0aa9b8f1ed51b7a9e2f7cb755994a5e\",\"name\":\"Laurent Doguin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/12929ce99397769f362b7a90d6b85071\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/b8c466908092b46634af916b6921f30187a051e4367ded7ac9b1a3f2c5692fd2?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/b8c466908092b46634af916b6921f30187a051e4367ded7ac9b1a3f2c5692fd2?s=96&d=mm&r=g\",\"caption\":\"Laurent Doguin\"},\"description\":\"Laurent is a nerdy metal head who lives in Paris. He mostly writes code in Java and structured text in AsciiDoc, and often talks about data, reactive programming and other buzzwordy stuff. He is also a former Developer Advocate for Clever Cloud and Nuxeo where he devoted his time and expertise to helping those communities grow bigger and stronger. He now runs Developer Relations at Couchbase.\",\"sameAs\":[\"https:\/\/x.com\/ldoguin\"],\"honorificPrefix\":\"Mr\",\"birthDate\":\"1985-06-07\",\"gender\":\"male\",\"award\":[\"Devoxx Champion\",\"Couchbase Legend\"],\"knowsAbout\":[\"Java\"],\"knowsLanguage\":[\"English\",\"French\"],\"jobTitle\":\"Director Developer Relation & Strategy\",\"worksFor\":\"Couchbase\",\"url\":\"https:\/\/www.couchbase.com\/blog\/es\/author\/laurent-doguin\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Using TestContainers for Spring Data Couchbase Applications","description":"Descubre c\u00f3mo usar TestContainers. Este post Couchbase ser\u00e1 sobre la construcci\u00f3n de casos de prueba Spring Data Couchbase y cubrir una serie de preguntas.","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.couchbase.com\/blog\/es\/testing-spring-data-couchbase-applications-with-testcontainers\/","og_locale":"es_MX","og_type":"article","og_title":"Testing Spring Data Couchbase Applications with TestContainers","og_description":"Find out how to use TestContainers. This Couchbase post will be about building Spring Data Couchbase test cases and cover an array of questions.","og_url":"https:\/\/www.couchbase.com\/blog\/es\/testing-spring-data-couchbase-applications-with-testcontainers\/","og_site_name":"The Couchbase Blog","article_published_time":"2017-01-17T23:16:37+00:00","article_modified_time":"2025-06-14T06:03:39+00:00","author":"Laurent Doguin","twitter_card":"summary_large_image","twitter_creator":"@ldoguin","twitter_misc":{"Written by":"unstructured.io","Est. reading time":"3 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/testing-spring-data-couchbase-applications-with-testcontainers\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/testing-spring-data-couchbase-applications-with-testcontainers\/"},"author":{"name":"Laurent Doguin","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c0aa9b8f1ed51b7a9e2f7cb755994a5e"},"headline":"Testing Spring Data Couchbase Applications with TestContainers","datePublished":"2017-01-17T23:16:37+00:00","dateModified":"2025-06-14T06:03:39+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/testing-spring-data-couchbase-applications-with-testcontainers\/"},"wordCount":483,"commentCount":2,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/testing-spring-data-couchbase-applications-with-testcontainers\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["testing"],"articleSection":["Java"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/testing-spring-data-couchbase-applications-with-testcontainers\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/testing-spring-data-couchbase-applications-with-testcontainers\/","url":"https:\/\/www.couchbase.com\/blog\/testing-spring-data-couchbase-applications-with-testcontainers\/","name":"Using TestContainers for Spring Data Couchbase Applications","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/testing-spring-data-couchbase-applications-with-testcontainers\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/testing-spring-data-couchbase-applications-with-testcontainers\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2017-01-17T23:16:37+00:00","dateModified":"2025-06-14T06:03:39+00:00","description":"Descubre c\u00f3mo usar TestContainers. Este post Couchbase ser\u00e1 sobre la construcci\u00f3n de casos de prueba Spring Data Couchbase y cubrir una serie de preguntas.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/testing-spring-data-couchbase-applications-with-testcontainers\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/testing-spring-data-couchbase-applications-with-testcontainers\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/testing-spring-data-couchbase-applications-with-testcontainers\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/testing-spring-data-couchbase-applications-with-testcontainers\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Testing Spring Data Couchbase Applications with TestContainers"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"El blog de Couchbase","description":"Couchbase, la base de datos NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"El blog de Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c0aa9b8f1ed51b7a9e2f7cb755994a5e","name":"Laurent Doguin","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/12929ce99397769f362b7a90d6b85071","url":"https:\/\/secure.gravatar.com\/avatar\/b8c466908092b46634af916b6921f30187a051e4367ded7ac9b1a3f2c5692fd2?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/b8c466908092b46634af916b6921f30187a051e4367ded7ac9b1a3f2c5692fd2?s=96&d=mm&r=g","caption":"Laurent Doguin"},"description":"Laurent es un metalero empoll\u00f3n que vive en Par\u00eds. Principalmente escribe c\u00f3digo en Java y texto estructurado en AsciiDoc, y a menudo habla sobre datos, programaci\u00f3n reactiva y otras cosas de moda. Tambi\u00e9n fue Developer Advocate de Clever Cloud y Nuxeo, donde dedic\u00f3 su tiempo y experiencia a ayudar a esas comunidades a crecer y fortalecerse. Ahora dirige las relaciones con los desarrolladores en Couchbase.","sameAs":["https:\/\/x.com\/ldoguin"],"honorificPrefix":"Mr","birthDate":"1985-06-07","gender":"male","award":["Devoxx Champion","Couchbase Legend"],"knowsAbout":["Java"],"knowsLanguage":["English","French"],"jobTitle":"Director Developer Relation & Strategy","worksFor":"Couchbase","url":"https:\/\/www.couchbase.com\/blog\/es\/author\/laurent-doguin\/"}]}},"authors":[{"term_id":9023,"user_id":49,"is_guest":0,"slug":"laurent-doguin","display_name":"Laurent Doguin","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/b8c466908092b46634af916b6921f30187a051e4367ded7ac9b1a3f2c5692fd2?s=96&d=mm&r=g","author_category":"","last_name":"Doguin","first_name":"Laurent","job_title":"","user_url":"","description":"Laurent es un metalero empoll\u00f3n que vive en Par\u00eds. Principalmente escribe c\u00f3digo en Java y texto estructurado en AsciiDoc, y a menudo habla sobre datos, programaci\u00f3n reactiva y otras cosas de moda. Tambi\u00e9n fue Developer Advocate de Clever Cloud y Nuxeo, donde dedic\u00f3 su tiempo y experiencia a ayudar a esas comunidades a crecer y fortalecerse. Ahora dirige las relaciones con los desarrolladores en Couchbase."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/2496","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/users\/49"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=2496"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/2496\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=2496"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=2496"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=2496"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=2496"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}