Я выполняю некоторые модульные тесты на некоторых EJBS через maven и встроенный контейнер GlassfishОдин из моих тестов работает, но все последующие попытки протестировать другой EJB приводят к одной и той же ошибке:
java.lang.ClassCastException: $Proxy81 cannot be cast to
С последующим бином, который я пытаюсь протестировать.Я уверен, что мои настройки хороши, так как, как я уже сказал, один из моих bean-компонентов может быть протестирован правильно.
Примеры рабочего кода:
@Stateful
public class LayoutManagerBean implements LayoutManager {
private final Log LOG = LogFactory.getLog(LayoutManagerBean.class);
public List<Menu> getMenus(User currentUser) {
...
}
}
@Local
public interface LayoutManager {
public List<Menu> getMenus(User user);
}
И тест:
public class LayoutManagerTest {
private static EJBContainer ejbContainer;
private static Context ctx;
@BeforeClass
public static void setUp() {
ejbContainer = EJBContainer.createEJBContainer();
ctx = ejbContainer.getContext();
}
@AfterClass
public static void tearDown() {
ejbContainer.close();
}
@Test
public void getMenus() {
LayoutManager manager = null;
try {
manager = (LayoutManager) ctx.lookup("java:global/classes/LayoutManagerBean!uk.co.monkeypower.openchurch.core.layout.beans.LayoutManager");
} catch (NamingException e) {
System.out.println("Failed to lookup the gosh darned bean!");
}
assertNotNull(manager);
//Menu[] menus = manager.getMenus();
//assertTrue(menus.length > 1);
}
}
И пример сбоя:
@Singleton
public class OpenChurchPortalContext implements PortalContext {
private Set<PortletMode> portletModes = Collections.emptySet();
private Set<WindowState> windowStates = Collections.emptySet();
private Properties portalProperties = new Properties();
public OpenChurchPortalContext() {
portletModes.add(PortletMode.VIEW);
portletModes.add(PortletMode.HELP);
portletModes.add(PortletMode.EDIT);
portletModes.add(new PortletMode("ABOUT"));
windowStates.add(WindowState.MAXIMIZED);
windowStates.add(WindowState.MINIMIZED);
windowStates.add(WindowState.NORMAL);
}
...
}
И тест:
public class OpenChurchPortalContextTest {
private static EJBContainer ejbContainer;
private static Context ctx;
@BeforeClass
public static void setUp() {
ejbContainer = EJBContainer.createEJBContainer();
ctx = ejbContainer.getContext();
}
@AfterClass
public static void tearDown() {
ejbContainer.close();
}
@Test
public void test() {
OpenChurchPortalContext context = null;
try {
context = (OpenChurchPortalContext) ctx.lookup("java:global/classes/OpenChurchPortalContext");
} catch (NamingException e) {
System.out.println("Failed to find the bean in the emebedded jobber");
}
assertNotNull(context);
Set<PortletMode> modes = (Set<PortletMode>) context.getSupportedPortletModes();
assertTrue(modes.size() > 1);
Set<WindowState> states = (Set<WindowState>) context.getSupportedWindowStates();
assertTrue(states.size() > 1);
}
}
Есть идеи, почему это может не сработать?