2014-06-09 14 views
5

Tôi mới vào mùa xuân và chỉ hơi có kinh nghiệm với JUnit và MockitoXuân JdbcTemplate kiểm tra đơn vị

tôi có phương pháp sau đây đòi hỏi một thử nghiệm đơn vị

public static String getUserNames(final String userName { 
    List<String> results = new LinkedList<String>(); 
    results = service.getJdbcTemplate().query("SELECT USERNAME FROM USERNAMES WHERE NAME = ?", new RowMapper<String>() { 
     @Override 
     public String mapRow(ResultSet rs, int rowNum) throws SQLException { 
      return new String(rs.getString("USERNAME"); 
     } 
    } 

    return results.get(0);  
    },userName) 

Có ai có bất kỳ đề xuất về cách tôi có thể đạt được điều này bằng cách sử dụng JUnit và Mockito?

Cảm ơn bạn rất nhiều trước!

+1

Bạn cần xác định ngữ cảnh ứng dụng thử nghiệm, nơi sẽ được chọn bởi SpringJUnit4ClassRunner. Như tôi thấy bạn đang cố gắng thực hiện kiểm thử tích hợp chứ không phải thử nghiệm đơn vị. Đây là hai điều khác nhau. – Vaelyr

+1

bạn muốn thử nghiệm các khía cạnh nào của phương pháp?Bạn đã thử viết những bài kiểm tra nào? Hiển thị một số công việc. –

+0

Bạn có thể xem xét khung [Acolyte] (http://acolyte.eu.org/) cho các bài kiểm tra đơn vị JDBC – cchantep

Trả lời

7

Nếu bạn muốn làm một bài kiểm tra đơn vị tinh khiết sau đó cho dòng

service.getJdbcTemplate().query("...."); 

Bạn sẽ cần phải thử các dịch vụ, sau đó các service.getJdbcTemplate () phương thức trả về một đối tượng JdbcTemplate giả, sau đó giả sử phương thức truy vấn của JdbcTemplate đã mô phỏng để trả về Danh sách bạn cần. Một cái gì đó như thế này:

@Mock 
Service service; 

@Mock 
JdbcTemplate jdbcTemplate; 


@Test 
public void testGetUserNames() { 

    List<String> userNames = new ArrayList<String>(); 
    userNames.add("bob"); 

    when(service.getJdbcTemplate()).thenReturn(jdbcTemplate); 
    when(jdbcTemplate.query(anyString(), anyObject()).thenReturn(userNames); 

    String retVal = Class.getUserNames("test"); 
    assertEquals("bob", retVal); 
} 

Ở trên không yêu cầu bất kỳ loại hỗ trợ mùa xuân nào. Nếu bạn đang thực hiện một thử nghiệm tích hợp nơi bạn thực sự muốn kiểm tra dữ liệu đó đã được lấy từ một DB đúng cách, thì có thể bạn sẽ muốn sử dụng Runner thử nghiệm mùa xuân.

+0

Cảm ơn bạn wxkevin :) – Mat

+0

Tôi nhận ngoại lệ sau. Tôi đã làm theo như thế này. http://stackoverflow.com/questions/38374823/spring-jdbctemplate-junit – Javadroider

1

Bạn cần sử dụng Kiểm tra mùa xuân để thực hiện việc này. Hãy xem một tài liệu:

http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/testing.html

Bạn cần phải tạo một thử nghiệm sử dụng @RunWith và sử dụng conf mùa xuân của bạn với @ContextConfiguration:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration("classpath:spring-config.xml") 
public class SpringAppTests { 
    @Autowired 
    private HelloService helloService; 

    @Test 
    public void testSayHello() { 
     Assert.assertEquals("Hello world!", helloService.sayHello()); 
    } 
} 

Ở đây bạn có một chút giải thích từ các tài liệu :

@Runwith

@Runwith (SpringJUnit4ClassRunner.class), các nhà phát triển có thể thực hiện chuẩn JUnit 4,4 đơn vị và hội nhập kiểm tra và đồng thời gặt hái những lợi ích của khuôn khổ TestContext như hỗ trợ để tải bối cảnh ứng dụng, dependency injection các trường hợp kiểm tra, phương pháp thử nghiệm giao dịch thực hiện vv

@ContextConfiguration

@ContextConfiguration Định nghĩa lớp cấp siêu dữ liệu được sử dụng để xác định cách tải và định cấu hình ApplicationContext cho các bài kiểm tra tích hợp . Cụ thể, @ContextConfiguration khai báo hoặc vị trí tài nguyên ngữ cảnh ứng dụng hoặc các lớp được chú thích sẽ được sử dụng để tải ngữ cảnh. Hy vọng sẽ giúp

Hope để giúp

+0

Cảm ơn bạn Fede .. Tôi nghĩ rằng tôi cần phải cụ thể hơn về những gì tôi muốn đạt được ... Tôi muốn biết nếu nó có thể Mock sự trở lại của phương pháp jdbcTemplate.query với JUnit và Mockito ... Cảm ơn bạn – Mat

+0

@Mat xin lỗi vì missunderstand bạn cần. Nếu bạn muốn tôi có thể xóa câu trả lời. Btw, trong trường hợp đó bạn cần mockito, bạn có thể xem trang này http://gojko.net/2009/10/23/mockito-in-six-easy-examples/ –