Tôi đang cố gắng viết một bài kiểm tra JUnit cho một dự án Spring Roo. Nếu thử nghiệm của tôi yêu cầu sử dụng các lớp thực thể, tôi nhận được Ngoại lệ sau:Làm cách nào để sử dụng các thử nghiệm JUnit với Spring Roo? (Các vấn đề với EntityManager)
java.lang.IllegalStateException: Entity manager has not been injected
(is the Spring Aspects JAR configured as an AJC/AJDT aspects library?)
Khía cạnh Spring JAR trông được định cấu hình chính xác. Đặc biệt, anh có chữ sau đây trong tập tin pom.xml
:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${spring.version}</version>
</dependency>
và
<plugin>
<configuration>
<outxml>true</outxml>
<aspectLibraries>
<aspectLibrary>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</aspectLibrary>
</aspectLibraries>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
và các lớp có sử dụng các lớp thực thể hoạt động tốt, khi không được gọi từ một thử nghiệm JUnit. Bất kỳ ý tưởng làm thế nào tôi có thể thiết lập những thứ lên để quản lý thực thể được tiêm từ một bài kiểm tra JUnit?
Đây là tôi class Test (nhiều hơn hoặc ít hơn):
public class ServiceExampleTest {
@Test
public void testFoo() {
FooService fs = new FooServiceImpl();
Set<Foo> foos = fs.getFoos();
}
}
này là đủ để ném ngoại lệ. Lớp FooServiceImpl trả về một tập hợp các Foo, trong đó Foo là một lớp thực thể. Phương thức getFoos()
hoạt động khi ứng dụng được chạy theo cách thông thường. Vấn đề chỉ xuất hiện trong bối cảnh kiểm tra đơn vị.
Bạn có thể đăng lớp thử nghiệm của bạn không? Tôi chưa bao giờ sử dụng Spring Roo, nhưng với các bài kiểm tra Spring bình thường, bạn thường phải mở rộng AbstractSpringJUnit4Test (hoặc một cái gì đó) hoặc sử dụng một Runner Spring tùy chỉnh thông qua chú thích cho các bài kiểm tra. – ponzao