Problema ao executar o JUnit

6 respostas
tebosoftware

Bom dia pessoal

estou estudando o uso do JUnit mas me deparei com um problema logo de cara, não consigo executar o teste, da o erro abaixo

java.io.FileNotFoundException: I:\JAVA\Projetos\WDevSup\junitvmwatcher1562056590.properties (O sistema não pode encontrar o arquivo especificado)

at java.io.FileInputStream.open(Native Method)

at java.io.FileInputStream.(FileInputStream.java:106)

at java.io.FileReader.(FileReader.java:55)

at org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.executeAsForked(JUnitTask.java:1028)

at org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.execute(JUnitTask.java:817)

at org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.executeOrQueue(JUnitTask.java:1657)

at org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.execute(JUnitTask.java:764)

at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)

at sun.reflect.GeneratedMethodAccessor82.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:105)

at org.apache.tools.ant.Task.perform(Task.java:348)

at org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:62)

at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)

at sun.reflect.GeneratedMethodAccessor82.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:105)

at org.apache.tools.ant.Task.perform(Task.java:348)

at org.apache.tools.ant.taskdefs.MacroInstance.execute(MacroInstance.java:391)

at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)

at sun.reflect.GeneratedMethodAccessor82.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:105)

at org.apache.tools.ant.Task.perform(Task.java:348)

at org.apache.tools.ant.Target.execute(Target.java:357)

at org.apache.tools.ant.Target.performTasks(Target.java:385)

at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1329)

at org.apache.tools.ant.Project.executeTarget(Project.java:1298)

at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)

at org.apache.tools.ant.Project.executeTargets(Project.java:1181)

at org.apache.tools.ant.module.bridge.impl.BridgeImpl.run(BridgeImpl.java:277)

at org.apache.tools.ant.module.run.TargetExecutor.run(TargetExecutor.java:460)

at org.netbeans.core.execution.RunClassThread.run(RunClassThread.java:151)

alguém sabe o q está acontecendo?

desde já agradeço

6 Respostas

Jair_Rillo_Junior

Pode postar o seu código?

Olhando o erro, parece que o seu método está tentando ler um arquivo .properties. Se for realmente isso, o seu teste está errado, pois testes unitários não devem depender de outros recursos/classes. Para esse caso, use um mock object (aconselho o JMOck).

tebosoftware

Mas é estranho, estou seguindo uma video aula da devmedia e a classe que ele montou le um xml.

só que no que ele mostra na vídeo aula funciona o JUnit.

Um teste que eu fiz numa classe minha de outro projeto, funcionou o teste.

será que tem alguma configuração no junit?

desde já agradeço

Jair_Rillo_Junior

A questão não é que o JUnit não pode ler um XML. Até porque, quem vai ler é o método que você está testando.
A questão é que em um teste unitário, você deve testar apenas a unidade. Caso a unidade use recursos externos ou outras classes, elas devem ser simuladas por um Mock Object.

O erro que está dando deve ser porque a classe não está encontrando o arquivo .properties. Isso é comum, pois quando trabalhamos com sistemas WEB, o caminho para ler o arquivo é diferente do caminho absoluto do mesmo.

Como eu disse… poste o código do método que você está testando e também do seu JUnit

tebosoftware

Segue os arquivos:

Spring.xml

<?xml version="1.0" encoding="ISO-8859-1"?>

<!--
    Document   : Spring.xml
    Created on : 18 de Outubro de 2008, 08:09
    Author     : Shubacca
    Description:
        Purpose of the document follows.
-->

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"
		  "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans>
  <bean name="hibernate" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" scope="singleton">
    <property name="hibernateProperties">
      <props>
        <prop key="hibernate.dialect">org.hibernate.dialect.FirebirdDialect</prop>
        <prop key="hibernate.connection.driver_class">org.firebirdsql.jdbg.FBDriver</prop>
        <prop key="hibernate.connection.username">sysdba</prop>
        <prop key="hibernate.connection.password">masterkey</prop>
        <prop key="hibernate.connection.url">jdbc:firebirdsql:localhost/3050:devmedia</prop>
        
        <prop key="c3p0.acquire_increment">1</prop>
        <prop key="c3p0.idle_test_period">120</prop>
        <prop key="c3p0.max_size">50</prop>
        <prop key="c3p0.max_statements">100</prop>
        <prop key="c3p0.min_size">5</prop>
        <prop key="c3p0.timeout">150</prop>
      </props>
    </property>
    
    <!--
    <property name="mappingResources">
      
    </property>
    -->
  </bean>
</beans>

SpringAcess.java

package devmedia.srs;

import org.hibernate.SessionFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * 
 * @author Shubacca
 * @date 18/10/2008
 */
public class SpringAccess {
  private static ApplicationContext springContext;
  
  public static synchronized ApplicationContext getSpringContext(){
    if (springContext == null)
      springContext = new ClassPathXmlApplicationContext("devmedia/src/resource/Spring.xml");
    
    return springContext;
  }
  
  public static synchronized SessionFactory getSessionFactory(){
    return (SessionFactory) getSpringContext().getBean("hibernate");
  }

  public SpringAccess() {
  }
  
  public static void main(String[] args) {
    SessionFactory sf = getSessionFactory();
    
    if (sf == null)
      System.out.println("Erro");
    else
      System.out.println("OK");
  }
}

Person.java

package devmedia.srs.test;

/**
 * 
 * @author Shubacca
 * @date 18/10/2008
 */
public class Person {
  private String nome;
  private String city;
  private int age;

  public Person() {
  }

  public Person(String nome, String city, int age) {
    this.nome = nome;
    this.city = city;
    this.age = age;
  }

  public int getAge() {
    return age;
  }

  public void setAge(int age) {
    this.age = age;
  }

  public String getCity() {
    return city;
  }

  public void setCity(String city) {
    this.city = city;
  }

  public String getNome() {
    return nome;
  }

  public void setNome(String nome) {
    this.nome = nome;
  } 
  
}

SpringAcessTest.java

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package devmedia.srs;

import devmedia.srs.test.Person;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.*;

/**
 *
 * @author Shubacca
 */
public class SpringAccessTest {

  public SpringAccessTest() {
  }

  @BeforeClass
  public static void setUpClass() throws Exception {
  }

  @AfterClass
  public static void tearDownClass() throws Exception {
  }

  @Before
  public void setUp() {
  }

  @After
  public void tearDown() {
  }

  /**
   * Test of getSpringContext method, of class SpringAccess.
   */
  @Test
  public void testGetSpringContext() {
    System.out.println("getSpringContext");

    assertNotNull(SpringAccess.getSpringContext());

    Person person1 = (Person) SpringAccess.getSpringContext().getBean("person1");

    assertEquals(person1.getNome(), "Henrique");
    assertEquals(person1.getCity(), "Belo Horizonte");
    assertTrue(person1.getAge() == 28);
  }

  @Test
  public void testGetHibernate() {
    System.out.println("getHibernate");
    assertNotNull(SpringAccess.getSessionFactory());
  }
}
dreamspeaker

Olá,

Isso não tem a ver como usar um recurso externo, isso é um erro gerado pelo jUnit task do ANT. Tá lá no seu stack trace…

... at java.io.FileReader.<init>(FileReader.java:55) at org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.executeAsForked(JUnitTask.java:102 at org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.execute(JUnitTask.java:817) at org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.executeOrQueue(JUnitTask.java:1657) at org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.execute(JUnitTask.java:764) ...
Provavelmente o ANT gera esse arquivo junitvmwatcherXXX.properties em algum lugar e não está conseguindo ler depois. Ou mesmo não está conseguindo gerar. Tenta mudar a versão do ANT, veja se seus classpaths estão em ordem, algo assim.

Se você jogar junitvmwatcher no Google vai achar um monte de gente com o mesmo problema, dá uma fuçada.

São mais de duas da manhã e tô sem sono, maldito horário de verão! :evil:

Abraço

tebosoftware

Valeu vou dar uma olhada

Criado 18 de outubro de 2008
Ultima resposta 20 de out. de 2008
Respostas 6
Participantes 3