Запуск тестов в проекте Seam, который не был сгенерирован программой seam-gen

У меня есть проект, сначала написанный с использованием EJB 2, затем перенесенный на Spring и, наконец, перенесенный на JBoss Seam 2.2.0 (это ситуация, с которой я имею дело). Он будет работать через Tomcat, но пока он выполняется через JBoss 4.2 (хотя я считаю, что этот факт не имеет значения). Моя задача — запустить все тесты, написанные до последней миграции.

После долгого гугления я написал что-то вроде этого:

public class CustomUserDAOTest extends SeamTest {
    @Test
    public void f() throws Exception {
        new ComponentTest() {
            @Override
            protected void testComponents() throws Exception {
                CustomUserDAO customUserDAO = (CustomUserDAO) Component.getInstance(CustomUserDAOBean.class);
                List<CustomUser> users = customUserDAO.getAll();
                assertNotNull(users);
            }
        }.run();
    }
}

Это хорошо, потому что мне удалось получить экземпляры CustomUserDAOBean и его зависимостей, но когда я запускаю тест, я получаю другую проблему:

java.lang.RuntimeException: exception invoking: getTransaction
    at org.jboss.seam.util.Reflections.invokeAndWrap(Reflections.java:154)
    at org.jboss.seam.Component.callComponentMethod(Component.java:2249)
    at org.jboss.seam.Component.unwrap(Component.java:2275)
    at org.jboss.seam.Component.getInstance(Component.java:2041)
    [OMITTED]
    at org.jboss.seam.intercept.JavaBeanInterceptor.invoke(JavaBeanInterceptor.java:103)
    at br.com.visent.sicorp.server.dao.impl.CustomUserDAOBean_$$_javassist_seam_1.listAll(CustomUserDAOBean_$$_javassist_seam_1.java)
    at br.com.visent.sicorp.server.dao.test.CustomUserDAOTest$1.testComponents(CustomUserDAOTest.java:24)
    at org.jboss.seam.mock.AbstractSeamTest$ComponentTest.run(AbstractSeamTest.java:162)
    [OMITTED]
    at org.testng.TestNG.run(TestNG.java:856)
    at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:110)
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:205)
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:174)
Caused by: javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial
    at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645)
    [OMITTED]
    at org.jboss.seam.util.Reflections.invokeAndWrap(Reflections.java:144)
    ... 45 more

Я нашел несколько комментариев об этом в Интернете, но не нашел решения. Что я должен делать? У кого-нибудь есть идеи?

Заранее спасибо!


person brandizzi    schedule 31.01.2011    source источник
comment
Почему бы вам просто не создать проект для создания швов и сравнить его с вашим проектом, чтобы увидеть, есть ли какие-либо настройки или что-то еще, что вы сделали неправильно?   -  person Shervin Asgari    schedule 01.02.2011
comment
Шервин, ваше предложение было превосходным! Я отвечаю на свой вопрос ниже. Спасибо!   -  person brandizzi    schedule 01.02.2011


Ответы (1)


Я последовал предложению Шервина выше и получил решение. На самом деле, когда мы создаем проект с помощью программы seam-gen, каталог src/test будет содержать readme.txt со следующим содержимым:

If you want to run tests using the Eclipse TestNG plugin, you'll need to add
these jars to the top of your TestNG classpath. Using the Run Dialog, select the
XML suite to run, and select these entries from the project tree:

/lib/test/jboss-embedded-all.jar
/lib/test/hibernate-all.jar
/lib/test/thirdparty-all.jar
/lib/jboss-embedded-api.jar
/lib/jboss-deployers-client-spi.jar
/lib/jboss-deployers-core-spi.jar

You also need to add the Embedded JBoss bootstrap folder, which you can do by
clicking on the Advanced... button.

/bootstrap

Seam uses JBoss Embedded in its unit and integration testing. This has an
additional requirement when using JDK 6. Add the following VM argument to the VM
args tab in the TestNG launch configuration for your suite.

-Dsun.lang.ClassLoader.allowArraySyntax=true 

Please be sure to use JDK 6 Update 4 or better (>= 1.6.0_04) if you are using
JDK 6. The Update 4 release upgraded to JAXB 2.1 which removes a problem with
earlier versions of Sun's JDK 6 which required overriding the JAXB libraries
using the endorsed directory. 

To add tests to your project create a TestNG xml descriptor called *Test.xml
(e.g. FooTest.xml) next to your test classes and run ant test.

Я открыл «Выполнить конфигурации» теста (что можно сделать с помощью кнопки «Выполнить» на панели инструментов, щелкнув маленькую черную стрелку вниз и выбрав «Выполнить конфигурации»), добавил банки, перечисленные выше, в «Путь к классам». вкладку (за исключением jboss-deployers-client-spi.jar, что было проблематично) и добавил -Dsun.lang.ClassLoader.allowArraySyntax=true в «Аргументы виртуальной машины» на вкладке «Аргументы», потому что я использую Java 6.

У меня все еще есть некоторые проблемы, но эта конкретная проблема решена.

person Community    schedule 01.02.2011