Ваш класс модульного теста должен иметь аннотацию @MockStaticEntityMethods.
Просто хотел добавить более подробную информацию к ответу выше, @migue, так как мне потребовалось некоторое время, чтобы выяснить, как получитьэто на работу.Сайт http://java.dzone.com/articles/mock-static-methods-using-spring-aspects действительно помог мне получить ответ ниже.
Вот что я сделал, чтобы внедрить менеджер сущностей через тестовый класс.Сначала аннотируйте свой тестовый класс с помощью @MockStaticEntityMethods и создайте класс MockEntityManager (это класс, который просто реализует интерфейс EntityManager).
Затем вы можете сделать следующее в своем тестовом классе ServiceExampleTest:
@Test
public void testFoo() {
// call the static method that gets called by the method being tested in order to
// "record" it and then set the expected response when it is replayed during the test
Foo.entityManager();
MockEntityManager expectedEntityManager = new MockEntityManager() {
// TODO override what method you need to return whatever object you test needs
};
AnnotationDrivenStaticEntityMockingControl.expectReturn(expectedEntityManager);
FooService fs = new FooServiceImpl();
Set<Foo> foos = fs.getFoos();
}
Это означает, что когда вы вызываете fs.getFoos (), AnnotationDrivenStaticEntityMockingControl будет внедрять ваш фиктивный менеджер сущностей, поскольку Foo.entityManager () является статическим методом.
Также обратите внимание, что , если fs.getFoos() вызывает другие статические методы классов Entity, такие как Foo и Bar, они также должны быть указаны как часть этого тестового примера.
Так, например, у Foo был статический метод поиска с именем "getAllBars (Long fooId)"который вызывается при вызове fs.getFoos (), тогда вам нужно будет сделать следующее, чтобы заставить AnnotationDrivenStaticEntityMockingControl работать.
@Test
public void testFoo() {
// call the static method that gets called by the method being tested in order to
// "record" it and then set the expected response when it is replayed during the test
Foo.entityManager();
MockEntityManager expectedEntityManager = new MockEntityManager() {
// TODO override what method you need to return whatever object you test needs
};
AnnotationDrivenStaticEntityMockingControl.expectReturn(expectedEntityManager);
// call the static method that gets called by the method being tested in order to
// "record" it and then set the expected response when it is replayed during the test
Long fooId = 1L;
Foo.findAllBars(fooId);
List<Bars> expectedBars = new ArrayList<Bar>();
expectedBars.add(new Bar(1));
expectedBars.add(new Bar(2));
AnnotationDrivenStaticEntityMockingControl.expectReturn(expectedBars);
FooService fs = new FooServiceImpl();
Set<Foo> foos = fs.getFoos();
}
Помните, что AnnotationDrivenStaticEntityMockingControl должен быть в том же порядке, что и fs.getFoos () вызывает его статические методы.