Fon go - Fake Mon go: невозможно загрузить набор данных из местоположения для модульного тестирования mongrepository с помощью fongo - PullRequest
0 голосов
/ 06 августа 2020

Я использую fon go как в базе данных памяти для тестирования моего mongodbrepository.

Я взял ссылку из http://dontpanic.42.nl/2015/02/in-memory-mongodb-for-unit-and.html для модульного тестирования.

To заполните образцы данных, я добавил требуемый файл json в test / resources / json -data / user / user. json, но он не загружен в fon go.

@Test
@UsingDataSet(loadStrategy = LoadStrategyEnum.CLEAN_INSERT, locations = "/json-data/user/user.json") // test/resources/..
    public void findUser_should_return_user() {
        User user = userRepository.findByXYZId("XX12345");
        assertNotNull(user);
    }

Что отсутствует ? Что нужно изменить, чтобы загрузить набор данных с json на fon go (fake mon go)

[Edit-1] Нужно попробовать 2 вещи # 1 Включить отсутствующее правило & # 2 json формат

выглядит как json формат должен включать имя коллекции - Ссылка-1: https://github.com/lordofthejars/nosql-unit#dataset -формат

Ссылка 2 - https://github.com/lordofthejars/nosql-unit/tree/master/nosqlunit-demo/src/test/resources/com/lordofthejars/nosqlunit/demo/mongodb

Ответы [ 2 ]

0 голосов
/ 07 августа 2020

Проблемы -

  • Неверный формат файла json - Прикреплен json для справки. Я пропустил добавление "пользовательской" коллекции в json
  • расположение файла должно быть в ресурсах /user.json или /../../user.json

Ссылка - https://github.com/lordofthejars/nosql-unit/issues/158

Мой рабочий ответ.

пользователь. json

{
  "user": [
    {
      "_id": "XX12345",
      "ack": true,
      "ackOn": []
    }
  ]
}

Тестовый набор

import com.myapp.config.FakeMongo;
import com.myapp.domain.User;
import com.lordofthejars.nosqlunit.annotation.UsingDataSet;
import com.lordofthejars.nosqlunit.core.LoadStrategyEnum;
import com.lordofthejars.nosqlunit.mongodb.MongoDbRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Import;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.junit4.SpringRunner;

import static com.lordofthejars.nosqlunit.mongodb.MongoDbRule.MongoDbRuleBuilder.newMongoDbRule;
import static org.junit.Assert.assertNotNull;


@ActiveProfiles({ "test", "unit" })
@RunWith(SpringRunner.class)
@Import(value = {FakeMongo.class})                                          
public class UserRepositoryTest {
        @Autowired
        private UserRepository userRepository;
        
        @Autowired
        private ApplicationContext applicationContext;
        
        @Rule
        public MongoDbRule embeddedMongoDbRule = newMongoDbRule().defaultSpringMongoDb("mockDB");
    
        @Test
        @UsingDataSet(locations = "/user.json", loadStrategy = LoadStrategyEnum.CLEAN_INSERT) // test/resources/..
            public void findUser_should_return_user() {
                User user = userRepository.findByXYZId("XX12345");
                assertNotNull(user);
            }
    
}
0 голосов
/ 06 августа 2020

Для тестирования я рекомендую эту библиотеку this

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

Я думаю, что это очень хорошая библиотека и протестирована в производственном классе. Встроенный MongoDB обеспечит платформо-нейтральный способ запуска mongodb в модульных тестах.

В тестах Вы можете создать простой метод, такой как @BeforeAll, и заполнить данные. Привожу Вам свой пример

@DataMongoTest
@ExtendWith(SpringExtension.class)
@DirtiesContext
class ItemReactiveRepositoryTest {


@Autowired
ItemReactiveRepository itemReactiveRepository;
List<Item> itemList = Arrays.asList(
        new Item(null, "Samsung TV", 400.0),
        new Item(null, "LG TV", 420.0),
        new Item(null, "Apple Watch", 420.0),
        new Item(null, "Beats Headphones", 149.99),
        new Item("ABC", "Bose Headphones", 149.99)
);

@BeforeEach
void setUp() {
    itemReactiveRepository.deleteAll()
            .thenMany(Flux.fromIterable(itemList))
            .flatMap(item -> itemReactiveRepository.save(item))
            .doOnNext(item -> System.out.println("Inserted item is :" + item))
            .blockLast();
}

@Test
public void getAllItems() {
    Flux<Item> all = itemReactiveRepository.findAll();
  StepVerifier.create(all).expectSubscription().expectNextCount(5).verifyComplete();
        }
     }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...