Back to Repositories

Testing AppRepository Database Operations in Apollo Config

This test suite validates the core functionality of the AppRepository in Apollo, focusing on application entity persistence operations. It verifies the creation and removal of application records in the database through integration testing.

Test Coverage Overview

The test suite provides comprehensive coverage of the AppRepository’s CRUD operations, specifically focusing on create and delete functionality. Key test cases include:

  • Application creation with basic attributes (ID, name, owner details)
  • Verification of repository count after operations
  • Application removal and state validation
  • Integration with Spring’s repository framework

Implementation Analysis

The testing approach utilizes Spring’s integration testing framework combined with JUnit. It extends AbstractIntegrationTest for setup consistency and employs dependency injection for repository access. The tests follow a clear arrange-act-assert pattern with explicit state verification before and after operations.

Technical Details

Testing tools and configuration:

  • JUnit 4 test framework
  • Spring Test context framework
  • Autowired repository injection
  • In-memory database for integration testing
  • AbstractIntegrationTest base class for common setup

Best Practices Demonstrated

The test suite exemplifies several testing best practices including isolated test methods, clear setup procedures, and thorough state verification. Each test method validates a single repository operation with proper cleanup, while maintaining high code readability and organization. The use of meaningful test data and explicit assertions ensures reliable test outcomes.

apolloconfig/apollo

apollo-biz/src/test/java/com/ctrip/framework/apollo/biz/repository/AppRepositoryTest.java

            
/*
 * Copyright 2024 Apollo Authors
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 */
package com.ctrip.framework.apollo.biz.repository;

import com.ctrip.framework.apollo.biz.AbstractIntegrationTest;
import com.ctrip.framework.apollo.common.entity.App;

import org.junit.Assert;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;

public class AppRepositoryTest extends AbstractIntegrationTest{

  @Autowired
  private AppRepository appRepository;

  @Test
  public void testCreate() {
    String appId = "someAppId";
    String appName = "someAppName";
    String ownerName = "someOwnerName";
    String ownerEmail = "[email protected]";

    App app = new App();
    app.setAppId(appId);
    app.setName(appName);
    app.setOwnerName(ownerName);
    app.setOwnerEmail(ownerEmail);

    Assert.assertEquals(0, appRepository.count());

    appRepository.save(app);

    Assert.assertEquals(1, appRepository.count());
  }

  @Test
  public void testRemove() {
    String appId = "someAppId";
    String appName = "someAppName";
    String ownerName = "someOwnerName";
    String ownerEmail = "[email protected]";

    App app = new App();
    app.setAppId(appId);
    app.setName(appName);
    app.setOwnerName(ownerName);
    app.setOwnerEmail(ownerEmail);

    Assert.assertEquals(0, appRepository.count());

    appRepository.save(app);

    Assert.assertEquals(1, appRepository.count());

    appRepository.deleteById(app.getId());

    Assert.assertEquals(0, appRepository.count());
  }

}