2013-01-18 23 views
7

Trong sự quan tâm của DRY, tôi muốn xác định ContextConfiguration của tôi trong một lớp cha mẹ và có tất cả các lớp học thử nghiệm của tôi kế thừa nó, như vậy: lớpTại sao thử nghiệm của tôi không thể kế thừa vị trí ContextConfiguration của nó từ cha mẹ?

phụ huynh: lớp

package org.my; 

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = "/org/my/Tests-context.xml") 
public abstract class BaseTest { 

} 

Child:

package org.my; 

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(inheritLocations = true) 
public class ChildTest extends BaseTest { 

    @Inject 
    private Foo myFoo; 

    @Test 
    public void myTest() { 
      ... 
    } 
} 

Theo tài liệu ContextConfiguration tôi sẽ có thể kế thừa vị trí của cha mẹ, nhưng tôi không thể làm cho nó hoạt động. Mùa xuân vẫn đang tìm kiếm tệp ở vị trí mặc định (/org/my/ChildTest-context.xml) và barfs khi không thể tìm thấy tệp đó. Tôi đã thử những điều sau đây không có may mắn:

  • Làm cho tầng lớp phụ huynh bê tông
  • Thêm một thử nghiệm không-op cho tầng lớp phụ huynh
  • thêm một thành viên tiêm cho tầng lớp phụ huynh cũng
  • kết hợp của các bên trên

Tôi đang thử nghiệm mùa xuân 3.0.7 và JUnit 4.8.2.

Trả lời

11

Xóa @ContextConfiguration(inheritLocations = true) trên lớp trẻ em. inheritLocations được đặt thành true theo mặc định.

Bằng cách thêm chú thích @ContextConfiguration(inheritLocations = true) mà không chỉ định vị trí, bạn đang yêu cầu Spring mở rộng danh sách vị trí tài nguyên bằng cách thêm ngữ cảnh mặc định là /org/my/ChildTest-context.xml.

Hãy thử với một cái gì đó như thế này:

package org.my; 

@RunWith(SpringJUnit4ClassRunner.class) 
public class ChildTest extends BaseTest { 

    @Inject 
    private Foo myFoo; 

    @Test 
    public void myTest() { 
      ... 
    } 
} 
+0

Đó là nó! Điều này nhắc tôi, tôi cần phải chấp nhận câu trả lời khác của bạn. Bạn chính thức là SO MVP cho tuần này :-) –