Образцы для тестирования Junit со средой Spring и mongodb

Мне нужно выполнить тест junit для моего весеннего приложения, и это делается с помощью базы данных mongo. У меня нет предыдущего опыта по встраиванию тестирования junit с использованием Spring и Mongodb. Любой ответ, будет очень полезным для меня...

Спасибо с уважением.

3 ответа

Конфигурация файла pom.xml выглядит следующим образом:

<properties>
    ....
    <junit.version>4.10</junit.version>
    ....
</properties>
<dependencies>
    .....
    <!-- Test dependencies -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>${junit.version}</version><!-- JUNIT CHANGES -->
        <scope>test</scope>         
    </dependency>

    <dependency>
        <groupId>de.flapdoodle.embed</groupId>
        <artifactId>de.flapdoodle.embed.mongo</artifactId>
        <version>1.26</version>
        <scope>test</scope>
    </dependency>            

    <!-- Mockito --><!-- JUNIT MOCKITO DEPENDENCY ADDED -->
    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-all</artifactId>
        <version>1.8.4</version>
    </dependency>
    <!-- Mockito -->
     ......
</dependencies>
<build>
      ....
      <plugins>
          ......
           <!-- JUNIT PLUGIN CODE ADDED-->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
              <source>1.5</source>
              <target>1.5</target>
            </configuration>
        </plugin>
         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.14</version>
            <configuration>
        <useSystemClassLoader>false</useSystemClassLoader>
            </configuration>
            <dependencies>
              <dependency>
                <groupId>org.apache.maven.surefire</groupId>
                <artifactId>surefire-junit47</artifactId>
                <version>2.14</version>
              </dependency>
            </dependencies>
          </plugin>
        <!-- END OF JUINT CODE -->
            .....
      </plugins>
      <sourceDirectory>src/main/java</sourceDirectory>
      <testSourceDirectory>src/test/junit</testSourceDirectory>
</build>....

После настройки конфигурации pom выполните код контрольного примера, как описано ниже.

  • Предполагая, что вы используете IDE, например, STS или другое, просто щелкните правой кнопкой мыши соответствующий класс, выберите Junit Test Case и создайте класс по пути src/test/java.
  • Для реализации для классов контроллера пружины сначала мы инициализируем все объекты, такие как значения инициализации из кода тестового примера соответствующего класса в setUp() метод.
  • Затем вызовите соответствующие методы из тестового примера и выполните соответствующую проверку утверждения junit, если соответствующий метод возвращает значения, такие как string/int/boolean и т. Д.,

Как ниже:

@Test
    public void testSave() {
    MessageValue messageValue = saveController.saveValue(value+"::Test", model);
    Query query = new Query(Criteria.where("value").is("Test").and("_id").is(id));
    SaveValue saveValueThis = template.findOne(query, Save.class);
    assertEquals("Success", messageValue.getMessage());
    // delete the saved value at the end of test case
        testDelete(); 
}

Если он возвращает некоторую страницу пользовательского интерфейса, которая перенаправлена ​​на другой экран, то проверьте, как показано ниже,

mockMvc = MockMvcBuilders.standaloneSetup(yourController).build();
    mockMvc.perform(get("/request/url").accept(MediaType.ALL))
    .andExpect(status().isOk());
  • Наконец в тестовом случае tearDown() Метод сброса инициализированных значений.

Я использую шаблон Spring mongo в приложении Spring MVC и JUnit 4.8.2 для модульных тестов. Просто создайте bean-компонент для вашего mongoTemplate и используйте Autowired, чтобы внедрить его в ваши классы. Что касается тестов, выполните следующие действия:

1. Создайте новый контрольный пример JUnit (щелкните правой кнопкой мыши свой класс в Package Explorer, затем new->JUnit Test Case). Он создаст тестовый метод для каждого метода вашего класса, который вы укажете.

2.Теперь у вас будут ваши тесты в src/test/java, а ваши ресурсы - в src/test/resources. Лучше, если вы создадите весенний конфигурационный файл только для тестов, чтобы вы могли направить тесты на локальный экземпляр mongodb, а ваше приложение, возможно, на экземпляр mongoDB для разработки. Поэтому создайте файл конфигурации в src/test/resources и назовите его testSpringConfig.xml или что-то еще и создайте bean-компонент там:

    <mongo:db-factory dbname="myDB"  host="localhost" 
    username="myDbUser" password="myPass"/>    

    <beans:bean id="mongoTemplate"   
    class="org.springframework.data.mongodb.core.MongoTemplate">
        <beans:constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
    </beans:bean>

    <beans:bean id="mongoTemplateLibrary"    
    class="org.springframework.data.mongodb.core.MongoTemplate">
        <beans:constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
    </beans:bean>

3.В своем тестовом классе используйте аннотации для ссылки на ваш файл конфигурации:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"/testSpringConfig.xml"})
public class MyDaoTest {

4. После того, как у вас настроен тестовый класс, введите шаблон Монго

@Autowired
@Qualifier("mongoTemplate")
private MongoTemplate mongoTemplate;

5. Теперь вы можете использовать его для вставки / удаления / поиска / обновления непосредственно в mongo (хотя это будет интеграционный тест, а не модульный тест). Например, вы можете удалить объекты, вставленные в ваши тесты, используя метод Tear Down.:

@After
public void tearDown() {
    mongoTemplate.remove(myObject);
}

Я бы начал с просмотра документации по JUnit, в частности, я бы начал с утверждений. При тестировании с использованием инфраструктуры внедрения зависимостей (например, Spring) необходима основа для моделирования. Проверьте EasyMock или Mockito.

Другие вопросы по тегам