3

このライブラリをいくつかの Spring アプリケーション テストで使用しようとしていますが、あまり成功していません。Spring Data MongoDB はサポートされているようですが、うまく動作させることができませんでした。は@Repository アプローチに完全に従っていません。

DummyClass POJO があるとします。

@Document(collection = DummyClass.ITEMS_COLLECTION_NAME)
public class DummyClass {

    public static final String ITEMS_COLLECTION_NAME = "dummy";

    //Maps _id mongodb internal field
    private BigInteger id;

    private String a;
    private String b;

    public DummyClass() {
        super();
    }

    public DummyClass(String a, String b) {
        this.a = a;
        this.b = b;
    }

    public String getA() {
        return a;
    }

    public void setA(String a) {
        this.a = a;
    }

    public String getB() {
        return b;
    }

    public void setB(String b) {
        this.b = b;
    }

}

そして、それぞれのリポジトリ インターフェイスとカスタム インターフェイス/実装があります。

@Repository
public interface DummyClassRepository extends MongoRepository<DummyClass, Long>, DummyClassRepositoryCustom {
}

public interface DummyClassRepositoryCustom {
    /* My dummy methods declaration */
}

public class DummyClassRepositoryImpl implements DummyClassRepositoryCustom{
    /* My dummy methods implementation */
}

これは私のテストコンテキストがどのように見えるかです(簡略化):

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mongo="http://www.springframework.org/schema/data/mongo"
       xsi:schemaLocation=
          "http://www.springframework.org/schema/context
          http://www.springframework.org/schema/context/spring-context-3.0.xsd
          http://www.springframework.org/schema/data/mongo
          http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd
          http://www.springframework.org/schema/beans
          http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

    <context:component-scan base-package="org.company.project.data.*"/>

    <!-- Fongo config (used by NoSQL-Unit) -->
    <bean name="fongo" class="com.foursquare.fongo.Fongo">
        <constructor-arg value="InMemoryMongo" />
    </bean>
    <bean id="mongo" factory-bean="fongo" factory-method="getMongo" />

    <mongo:db-factory id="mongoDbFactory" mongo-ref="mongo" />

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

    <mongo:repositories base-package="org.company.project.data.repositories.mongodb"/>

    <!-- Some other beans declaration -->

</beans>

明らかに、私の MongoDB リポジトリは の下にありorg.company.project.data.repositories.mongodbます。

問題は、特定の .json をインメモリ MongoDB インスタンスにロードできないことです。私がこれまでに持っているもの:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"/test-context.xml"})
public class MyTest {

    private static Logger logger = Logger.getLogger(MyTest.class);

    @Autowired
    private ApplicationContext applicationContext;

    @Rule
    public MongoDbRule mongoDbRule = newMongoDbRule().defaultSpringMongoDb("test");

    @Autowired
    private DummyClassRepository dummyClassRepository;

    @Test
    @UsingDataSet(locations = {"/dummy.json"}, loadStrategy = LoadStrategyEnum.CLEAN_INSERT)
    public void myTest(){
         logger.info(dummyClassRepository.findAll().size());
         assert(false);
    }

}

.json ファイルの内容は、ドキュメントで指定されている形式に従いますが、指定した内容に関係なく、テスト メソッドを開始すると、コレクションは常に空になります。たとえば、この .json ファイルの例は次のようになります。

{
    "dummy": [
        {
            "_class": "org.company.project.data.model.DummyClass",
            "_id": "51557362e4b083f9e619f99c",
            "a": "a",
            "b": "b"
        },
        {
            "_class": "org.company.project.data.model.DummyClass",
            "_id": "51557362e4b083f9e619f99d",
            "a": "c",
            "b": "d"
        }
    ]
}

私がショックを受けたのは、テスト メソッド自体の中で、問題なくダミー インスタンスをデータベースに追加できたことです。これは基本的に、リポジトリが実際に正常に動作していることを示しています。

指定されたデータセットがデータベースにロードされていない理由を教えてくれるこの JUnit 拡張機能を使用した人はいますか?

前もって感謝します!

4

2 に答える 2

3

これを行う方法の良い例が必要な場合。https://github.com/JohnathanMarkSmith/spring-mongo-demoで johnathan mark smiths の git の例を確認してください。

于 2013-06-28T14:18:19.323 に答える
2

ジャランダ、

あなたの春のリポジトリと nosqlunit は異なるデータベースで動作しているようです。nosqlunit の同じデータベースを使用するように、Spring 構成を変更してみてください。

 <mongo:db-factory id="mongoDbFactory" mongo-ref="mongo" dbname="test" />
于 2013-06-27T18:55:22.643 に答える