Алтернатива би била да стартирате цялото приложение за пружинно зареждане в тест. В този случай вашето приложение за пролетно зареждане ще бъде открито автоматично и вграденият mongoDB ще бъде изтеглен и стартиран от Spring Boot
@RunWith(SpringRunner.class)
@SpringBootTest
public class YourSpringBootApplicationTests {
08:12:14.676 ИНФОРМАЦИЯ EmbeddedMongo:42 - забележка:noprealloc може да навреди на производителността в много приложения 08:12:14.694 ИНФОРМАЦИЯ EmbeddedMongo:42 -2017-12-31T08:12:14.693 I2stenting+020db 020dp [46tangod pip] =52299 08:12:22.005 INFO връзка:71 -Отворена връзка [connectionId{localValue:2, serverValue:2}] tolocalhost:52299
В случай на вашия пример можете да промените кода, за да стартирате вграден Mongo на различен порт:
-
добавете файл test/resoures/test.properties, за да замените свойствата от application.properties
mongo.db.name=person_testDB mongo.db.url=localhost mongo.db.port=12345
-
модифицира MongoDBConfig:добавете поле MONGO_DB_PORT
@EnableMongoRepositories public class MongoDBConfig { @Value("${mongo.db.url}") private String MONGO_DB_URL; @Value(("${mongo.db.port:27017}")) private int MONGO_DB_PORT; @Value("${mongo.db.name}") private String MONGO_DB_NAME; @Bean public MongoTemplate mongoTemplate() { MongoClient mongoClient = new MongoClient(MONGO_DB_URL, MONGO_DB_PORT); MongoTemplate mongoTemplate = new MongoTemplate(mongoClient, MONGO_DB_NAME); return mongoTemplate; } }
-
модифициран тестов клас:премахване на анотацията @DataMongoTest. Тази анотация принуждава стартирането на вградения mongoDB екземпляр
static MongodExecutable mongodExecutable; @BeforeClass public static void setup() throws Exception { MongodStarter starter = MongodStarter.getDefaultInstance(); String bindIp = "localhost"; int port = 12345; IMongodConfig mongodConfig = new MongodConfigBuilder() .version(Version.Main.PRODUCTION) .net(new Net(bindIp, port, Network.localhostIsIPv6())) .build(); mongodExecutable = null; try { mongodExecutable = starter.prepare(mongodConfig); mongodExecutable.start(); } catch (Exception e){ // log exception here if (mongodExecutable != null) mongodExecutable.stop(); } } @AfterClass public static void teardown() throws Exception { if (mongodExecutable != null) mongodExecutable.stop(); }
Още един начин е да използвате MongoRepository и init embedded Mongo като част от тестов клас @Configuration:това е очертано тук:Как да конфигурирате Embedded MongDB за тестване на интеграция в приложение Spring Boot?