Java 如何为控制器配置测试类以使用嵌入式Mongo?
如果我的问题太明显,我道歉,但我对春天还不熟悉。我的应用程序上有两个属性配置文件。一个名为Java 如何为控制器配置测试类以使用嵌入式Mongo?,java,spring,mongodb,junit,Java,Spring,Mongodb,Junit,如果我的问题太明显,我道歉,但我对春天还不熟悉。我的应用程序上有两个属性配置文件。一个名为application.properties并具有我的生产数据库的配置设置,另一个名为application test.properties,它存储我运行以测试我的应用程序的嵌入式Mongodb的信息。我还有一个名为ExpertRepository.java的存储库类,如下所示: import org.bson.types.ObjectId; import org.springframework.data.
application.properties
并具有我的生产数据库的配置设置,另一个名为application test.properties
,它存储我运行以测试我的应用程序的嵌入式Mongo
db的信息。我还有一个名为ExpertRepository.java
的存储库类,如下所示:
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.repository.MongoRepository;
public interface ExpertRepository extends MongoRepository<Experts, String>{
Experts findBy_id(ObjectId _id);
}
现在我想测试我的控制器类,为此我想使用EmbeddedMongo数据库,这是我为测试目的指定的。这就是我的ExpertControllerTest.java
类现在的样子:
@ExtendWith(SpringExtension.class)
@WebMvcTest(controllers = ExpertController.class)
class ExpertControllerTest {
@Autowired
private MockMvc mockMvc;
@Autowired
private ObjectMapper objectMapper;
@MockBean
private ExpertRepository expertRepo;
Experts demoExpert = new Experts(ObjectId.get(),"Steve Jobs", "Enterpreneur",
Availability.BUSY, Language.CHINESE);
@Test
public void getExperts() throws Exception {
mockMvc.perform(MockMvcRequestBuilders.get("/experts/")
.contentType(MediaType.APPLICATION_JSON)
.accept(MediaType.APPLICATION_JSON))
.andExpect(MockMvcResultMatchers.status().isOk());
}
我如何将这个类与我的嵌入式Mongo连接起来,并用一些数据预填充它以测试我的rest方法?提前感谢您的帮助这可以通过使用两个数据源来实现,一个用于生产环境,另一个用于测试环境。由于您已经将filename用作application-test.properties,因此需要在运行测试类时将概要文件设置为以编程方式进行测试 如果您使用的是Spring 2.x并包含在gradle中 测试实现“de.flapdoodle.embed:de.flapdoodle.embed.mongo”
您的测试和mongo的测试实例之间的绑定应该是自动的我从 但是我写了一个测试来证明它是有效的,你不需要任何其他东西,只需要“de.flapdoodle.embed:de.flapdoodle.embed.mongo”依赖项,很好的例子:
@ExtendWith(SpringExtension.class)
@WebMvcTest(controllers = ExpertController.class)
class ExpertControllerTest {
@Autowired
private MockMvc mockMvc;
@Autowired
private ObjectMapper objectMapper;
@MockBean
private ExpertRepository expertRepo;
Experts demoExpert = new Experts(ObjectId.get(),"Steve Jobs", "Enterpreneur",
Availability.BUSY, Language.CHINESE);
@Test
public void getExperts() throws Exception {
mockMvc.perform(MockMvcRequestBuilders.get("/experts/")
.contentType(MediaType.APPLICATION_JSON)
.accept(MediaType.APPLICATION_JSON))
.andExpect(MockMvcResultMatchers.status().isOk());
}
@DataMongoTest
public class MongoApplicationTest {
@Autowired
protected MongoTemplate mongoTemplate;
@Test
public void test1() {
assertNotNull(mongoTemplate);
DBObject objectToSave = BasicDBObjectBuilder.start()
.add("key", "value")
.get();
mongoTemplate.save(objectToSave, "collection");
assertThat(mongoTemplate.findAll(DBObject.class, "collection")).extracting("key")
.containsOnly("value");
}
}