2015-05-22 32 views
1

我想用flapdoodle設置mongodb junit環境,並且在嘗試下載mongodb存檔時獲得java.io.IOException使用嵌入mongodb的junit測試用例de.flapdoodle.embed.mongo

我使用:

  • 彈簧數據的MongoDB:1.6.1.RELEASE
  • de.flapdoodle.embed.mongo 1.47.3
  • org.springframework:4.0.3.RELEASE

我收到以下錯誤:

de.flapdoodle.embed.process.exceptions.DistributionException: java.io.IOException: Could not open inputStream for http://downloads.mongodb.org/win32/mongodb-win32-i386-3.0.2.zip 

所致:的java.net.UnknownHostException:downloads.mongodb.org 在java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:178)

以及其指向的MongoDB-Win32的i386-3.0.2。 zip,但我使用Windows 64位。

這裏是我的代碼

package com.bosch.test; 

import junit.framework.TestCase; 

import org.junit.AfterClass; 
import org.junit.Assert; 
import org.junit.BeforeClass; 
import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.springframework.data.mongodb.core.MongoTemplate; 
import org.springframework.test.context.ContextConfiguration; 
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 
import org.springframework.test.context.support.AnnotationConfigContextLoader; 

import com.bosch.in.model.Device; 
import com.bosch.in.service.imp.DeviceServiceImp; 
import com.mongodb.DB; 
import com.mongodb.DBCollection; 
import com.mongodb.Mongo; 
import com.mongodb.MongoClient; 

import de.flapdoodle.embed.mongo.MongodExecutable; 
import de.flapdoodle.embed.mongo.MongodProcess; 
import de.flapdoodle.embed.mongo.MongodStarter; 
import de.flapdoodle.embed.mongo.config.MongodConfigBuilder; 
import de.flapdoodle.embed.mongo.config.Net; 
import de.flapdoodle.embed.mongo.distribution.Version; 
import de.flapdoodle.embed.process.runtime.Network; 

@ContextConfiguration(classes=ApplicationConfig.class,loader=AnnotationConfigContextLoader.class) 
@RunWith(SpringJUnit4ClassRunner.class) 
public class DeviceServiceTest2 { 

    private static final MongodStarter starter = MongodStarter 
      .getDefaultInstance(); 

    private static MongodExecutable mongodExe; 
    private static MongodProcess mongod; 

    private static MongoClient mongo; 


    private DeviceServiceImp deviceServiceImp; 

    private MongoTemplate template; 

    @BeforeClass 
    public static void setUp() throws Exception { 
     //System.out.println("1"); 
     mongodExe = starter.prepare(new MongodConfigBuilder() 
       .version(Version.Main.V3_0) 
       .net(new Net(12345, Network.localhostIsIPv6())).build()); 
     System.out.println("2"); 
     mongod = mongodExe.start(); 
     System.out.println("3"); 

     System.out.println("4"); 
     mongo = new MongoClient("12345", 12345); 
     System.out.println("5"); 

    } 

    @AfterClass 
    public static void tearDown() throws Exception { 
     mongod.stop(); 
     mongodExe.stop(); 
    } 

    public Mongo getMongo() { 
     return mongo; 
    } 

@Test 
public void save(){ 

    System.out.println("1"); 

} 

} 

回答

1

我認爲問題是,你使用的是默認MongodStarter就是不知道你的代理配置(這是我的情況)。 你只需要配置mongodStarter。

而不是使用

private static final MongodStarter starter = MongodStarter 
     .getDefaultInstance(); 

,你應該在安裝程序中擁有的財產以後這樣的()

Command command = Command.MongoD; 

IRuntimeConfig runtimeConfig = new RuntimeConfigBuilder() 
     .defaults(command) 
     .artifactStore(new ArtifactStoreBuilder() 
       .defaults(command) 
       .download(new DownloadConfigBuilder() 
         .defaultsForCommand(command) 
         .proxyFactory(new HttpProxyFactory("proxy_host", 8080)))) 
     .build(); 

MongodStarter starter = MongodStarter.getInstance(runtimeConfig); 

此配置上flapdoodle doc很好的解釋。

+0

非常感謝:)其工作.. – lokesh