{"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\/testing-spring-data-couchbase-applications-with-testcontainers\/","title":{"rendered":"Testing Spring Data Couchbase Applications with 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\">In a <a href=\"create-couchbase-docker-images-testcontainers\">previous<\/a> <a href=\"configure-official-couchbase-docker-test\">series<\/a> <a href=\"unit-integration-tests-couchbase-docker-container\">of blog posts<\/a> 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 will be about building <a href=\"https:\/\/docs.couchbase.com\/sdk-extensions\/spring-data-couchbase.html\">Spring Data Couchbase<\/a> test cases and cover theses questions we left out.<\/p>\n<h2>Hardwire Unconfigurable Port<\/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\">One of the limitations we currently have on Couchbase Server is that you cannot change some of the default port. This is a problem with Docker as it\u2019s changing ports only notified otherwise. This can be great because it means you can have several Couchbase instances running on the same machine. But unfortunately won\u2019t work so some ports will have to be fixed. This can be declared fairly easily with TestContainers using the addFixedExposedPort method.<\/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\">With that out of the way, our Java SDK will be able to connect to N1QL.<\/p>\n<h2>Abstract Spring Data Couchbase Docker Test Case<\/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\">The goal here is to create an abstract test case that will be used by any class that needs a Couchbase instance and Spring Data Couchbase configured. It starts as in the previous posts by instantiating a CouchbaseContainer field. Since we are testing Spring Data we configure support for Index, Query and let\u2019s throw in FTS for later.<\/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\">To make sure this class will run tests for your application, add the\u00a0<code style=\"color: #c7254e;background-color: #f9f2f4;padding: 2px 4px\">@RunWith(SpringRunner.class)<\/code>\u00a0annotation. And to make sure your application configuration is tested as well as our custom configuration, add\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\">Now talking about custom configuration, what do we need? We want to override the default Couchbase configuration of the app. To do so we need to implement a CouchbaseConfigurer. This interface defines all the bean needed for Spring Data Couchbase to work properly. It provides instances for CouchbaseEnvironment, ClusterInfo, Cluster and 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\">They will all come from our CouchbaseContainer setup before running the tests. So we need to make sure that the Container is running and ready before intializing all the beans. This can be achieve by adding an init() method annotated with @PostConstruct. This will allow us to first make sure the container is running, then setup additional stuff. In the following example we setup a bucket called default and setup the Index type to be 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\">Once we have this abstract test case, all we have to do next is create a class that extends it and start writing tests! Here we can inject Services from our application as well as a lower level Bucket. What you see in this test is first a call to an importer service that create documents. Then we create an Index on the default bucket and test a query on it.<\/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\">As you can see once the Abstract test case is created, the amount of code is really minimal and correspond exactly to what you want to test.<\/p>\n","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>\n","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.7.1 (Yoast SEO v25.7) - 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\/testing-spring-data-couchbase-applications-with-testcontainers\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\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\/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 minutes\" \/>\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\":\"en-US\",\"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\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/testing-spring-data-couchbase-applications-with-testcontainers\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@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\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@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\":\"en-US\",\"@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\/author\/laurent-doguin\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Using TestContainers for Spring Data Couchbase Applications","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.","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\/testing-spring-data-couchbase-applications-with-testcontainers\/","og_locale":"en_US","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\/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 minutes"},"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":"en-US","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":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/testing-spring-data-couchbase-applications-with-testcontainers\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@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":"en-US"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"The Couchbase Blog","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@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":"en-US","@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\/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 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."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/2496","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/users\/49"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/comments?post=2496"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/2496\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media?parent=2496"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/categories?post=2496"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/tags?post=2496"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=2496"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}