2013-04-04 139 views
1

我需要为我的spring应用程序执行junit测试,并且使用mongo数据库完成测试。 我以前没有用spring和mongodb嵌入junit测试的经验。 任何答复,将对我很有帮助...使用Spring框架和mongodb进行Junit测试的示例

感谢致以问候。

+0

感谢Steven对于回复,我从未做过像自动化那样的任何测试。仍然我只做了手动测试。其实我正在冲浪的一些例子在春季框架体系结构中用Mongodatabase或任何数据库进行junit测试。如何开始实施junit测试,如何检查控制器/服务层,如何为添加/编辑/删除值等进行数据库测试, – 2013-04-04 06:06:05

+0

@ lk.annamalai如果答案对您有帮助,我会很感激您将其标记为已接受。这会帮助我和其他人有类似的问题。谢谢 – AntonioOtero 2013-06-27 13:58:29

回答

0

我会先看看JUnit文档,具体来说,我会从Assertions开始。当使用依赖注入框架(例如Spring)进行测试时,模拟框架是必不可少的。检查出EasyMockMockito

0

我在Spring MVC应用程序中使用Spring mongo模板,在单元测试中使用JUnit 4.8.2。 只需为您的mongoTemplate创建一个bean并使用Autowired将其注入到您的类中。至于测试,请按照下列步骤操作:

1.创建一个新的JUnit测试用例(右键单击Package Explorer中的类,然后单击新建 - > JUnit测试用例)。它将为您指定的每个类的方法创建一个测试方法。

2.Now你有你在的src/test/java下测试和尤尔在的src /测试/资源资源。最好是为测试创建一个spring配置文件,以便您可以将测试指向本地mongodb实例,将您的应用程序指向Development mongoDB实例。因此,在SRC创建一个配置文件/测试/资源并将其命名为testSpringConfig.xml或任何与创造有豆:

<mongo:db-factory dbname="myDB" host="localhost" 
    username="myDbUser" password="myPass"/>  

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

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

3.In您的测试类,使用注释引用您的配置文件:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = {"/testSpringConfig.xml"}) 
public class MyDaoTest { 

4.一旦你有你的测试类设置,注入蒙戈模板

@Autowired 
@Qualifier("mongoTemplate") 
private MongoTemplate mongoTemplate; 

5.现在你可以用它直接插入/删除/发现/更新到mongo(尽管这可能是一个集成测试而不是单元测试) 例如,你可以使用Tear来移除你在测试中插入的对象向下方法:

@After 
public void tearDown() { 
    mongoTemplate.remove(myObject); 
} 
+0

嗨AntonioOtero,谢谢你的回复。让我试试这个,让你知道更新很快。 – 2013-04-09 04:50:54

+0

@ lk.annamalai它是否适合你? – AntonioOtero 2013-06-25 15:48:50

+0

请参阅我使用的以下信息。 – 2013-09-24 03:47:57

0

pom.xml文件配置如下,

<properties> 
    .... 
    <junit.version>4.10</junit.version> 
    .... 
</properties> 
<dependencies> 
    ..... 
    <!-- Test dependencies --> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>${junit.version}</version><!-- JUNIT CHANGES --> 
     <scope>test</scope>   
    </dependency> 

    <dependency> 
     <groupId>de.flapdoodle.embed</groupId> 
     <artifactId>de.flapdoodle.embed.mongo</artifactId> 
     <version>1.26</version> 
     <scope>test</scope> 
    </dependency>    

    <!-- Mockito --><!-- JUNIT MOCKITO DEPENDENCY ADDED --> 
    <dependency> 
     <groupId>org.mockito</groupId> 
     <artifactId>mockito-all</artifactId> 
     <version>1.8.4</version> 
    </dependency> 
    <!-- Mockito --> 
    ...... 
</dependencies> 
<build> 
     .... 
     <plugins> 
      ...... 
      <!-- JUNIT PLUGIN CODE ADDED--> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>2.3.2</version> 
      <configuration> 
       <source>1.5</source> 
       <target>1.5</target> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <version>2.14</version> 
      <configuration> 
     <useSystemClassLoader>false</useSystemClassLoader> 
      </configuration> 
      <dependencies> 
       <dependency> 
       <groupId>org.apache.maven.surefire</groupId> 
       <artifactId>surefire-junit47</artifactId> 
       <version>2.14</version> 
       </dependency> 
      </dependencies> 
      </plugin> 
     <!-- END OF JUINT CODE --> 
      ..... 
     </plugins> 
     <sourceDirectory>src/main/java</sourceDirectory> 
     <testSourceDirectory>src/test/junit</testSourceDirectory> 
</build>.... 

建立POM cofigurations后,执行测试用例代码通过以下步骤

  • 假设您使用IDE的STS或其他类型,只需右键单击相应的类并单击Junit测试用例并在src/test/java路径下创建类。
  • 为了实现Spring控制器类,首先我们初始化所有的对象,如setUp()方法中相应类的测试用例代码的初始化值。
  • 然后从测试用例中调用相应的方法,并在相应的方法返回值如string/int/boolean等时执行相应的junit断言签入,

象下面这样:

@Test 
    public void testSave() { 
    MessageValue messageValue = saveController.saveValue(value+"::Test", model); 
    Query query = new Query(Criteria.where("value").is("Test").and("_id").is(id)); 
    SaveValue saveValueThis = template.findOne(query, Save.class); 
    assertEquals("Success", messageValue.getMessage()); 
    // delete the saved value at the end of test case 
     testDelete(); 
} 

如果返回一些UI页面是重定向到其他屏幕,然后检查如下图所示,

mockMvc = MockMvcBuilders.standaloneSetup(yourController).build(); 
    mockMvc.perform(get("/request/url").accept(MediaType.ALL)) 
    .andExpect(status().isOk()); 
  • 最后的测试案例tearDown()方法重置初始化值。