https://github.com/sanjuthomas/spring-data-mongodb
为了理解如何使用fongo对mongo应用程序进行单元测试,我尝试了几个例子,比如上面的例子。所有的例子都能用--包括上面的例子,但是当我把pom升级到spring boot支持的最新版本时,所有的例子都失败了。似乎不再为测试加载应用程序上下文。这个单元测试功能被破坏了吗?或者我需要修改代码吗?
下面是在Spring 3中运行失败的代码-现在规则失败,声明上下文中不存在mongo实例:
package com.ourownjava.spring.data.mongo.repository;
import static com.lordofthejars.nosqlunit.mongodb.MongoDbRule.MongoDbRuleBuilder.newMongoDbRule;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.util.List;
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.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.config.AbstractMongoConfiguration;
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.foursquare.fongo.Fongo;
import com.lordofthejars.nosqlunit.annotation.ShouldMatchDataSet;
import com.lordofthejars.nosqlunit.annotation.UsingDataSet;
import com.lordofthejars.nosqlunit.mongodb.MongoDbRule;
import com.mongodb.Mongo;
import com.ourownjava.spring.data.mongo.model.Trade;
/**
* Spring Data MongoDB Repository Unit testcase.
*
* @author ourownjava.com
*
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class TestTradeRepository {
@Autowired
private ApplicationContext applicationContext;
@Rule
public MongoDbRule mongoDbRule = newMongoDbRule().defaultSpringMongoDb(
"trade-db");
@Autowired
private TradeRepository tradeRepository;
@Test
@ShouldMatchDataSet(location = "/testData/trade-t1.json")
public void shouldSaveTrade(){
tradeRepository.save(createTrade());
}
@Test
@UsingDataSet(locations = {"/testData/trade-t1.json"})
public void shouldFindByTraderId(){
final List<Trade> trades = tradeRepository.findByTraderId("papjac");
assertNotNull(trades);
assertTrue(trades.size() > 0);
assertEquals("papjac", trades.get(0).getTraderId());
}
@Test
@UsingDataSet(locations = {"/testData/trade-t1.json"})
public void shouldFindByExchangeCode(){
final List<Trade> trades = tradeRepository.findByExchangeCode("NYSE");
assertNotNull(trades);
assertTrue(trades.size() > 0);
assertEquals("NYSE", trades.get(0).getExchangeCode());
}
private Trade createTrade(){
final Trade trade = new Trade();
trade.setId("t1");
trade.setTraderId("papjac");
trade.setExchangeCode("NYSE");
trade.setValue(90.3);
return trade;
}
@Configuration
@EnableMongoRepositories
@ComponentScan(basePackageClasses = { TradeRepository.class })
static class MongoConfiguration extends AbstractMongoConfiguration {
@Override
protected String getDatabaseName() {
return "trade-db";
}
@Override
public Mongo mongo() {
return new Fongo("trade-test").getMongo();
}
@Override
protected String getMappingBasePackage() {
return "com.ourownjava.spring.data.mongo";
}
}
}发布于 2015-04-07 20:34:50
对于mongo(),您必须使用Annotation @Bean
@Bean
@Override
public Mongo mongo() {
return new Fongo("trade-test").getMongo();
}https://stackoverflow.com/questions/28302453
复制相似问题