Erro quanto eu Testo minha aplicação JUnit (corrigido)

5 respostas
G

Ola pessoal sera que alguem poderia me ajudar com um erro que esta dano na minha aplicação?
Vou postar minhas classes o erro

package br.com.devmedia.completeswingapp.dao;

import java.sql.ResultSet;
import java.sql.SQLException;

import br.com.devmedia.completeswingapp.entity.User;

public class UserDAO extends GenericDAO {
	
	public int addUser(User usr) throws SQLException{
		usr.setId(getNextId("users"));
		String query = "insert into users (id, name, login, password) values (?, ?, ?, ?)";
		executeCommand(query,usr.getId(), usr.getName(), usr.getLogin(), usr.getPassword());
		return usr.getId();
	}
	
	public void removeUser(int idUser) throws SQLException{
		executeCommand("delete from users where id = ?", idUser);
	}
	
	public void updateUser(User usr) throws SQLException{
		String query = "update users set name =?, login =?, password =? where id =?";
		executeCommand(query,usr.getName(), usr.getLogin(), usr.getPassword(), usr.getId());
	}
	
	public User getUser(int idUser) throws SQLException{
		ResultSet rs = executeQuery("select * from users where id =?", idUser);
		User usr = null;
		if(rs.next()){
			usr = populateUserInfo(rs);
		}
		rs.close();
		return usr;
	}

	private static User populateUserInfo(ResultSet rs) throws SQLException {
		User toReturn = new User();
		toReturn.setId(rs.getInt("id"));
		toReturn.setLogin(rs.getString("login"));
		toReturn.setName(rs.getString("name"));
		toReturn.setPassword(rs.getString("password"));
		return toReturn;
	}
}

Classe para fazer o teste na UserDAO

/**
 * 
 */
package br.com.devmedia.completeswingapp.dao;

import static org.junit.Assert.*;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

import br.com.devmedia.completeswingapp.entity.User;

/**
 * @author Renato
 *
 */
public class UserDAOTest {

	public static Integer idOfUser =0;
	/**
	 * @throws java.lang.Exception
	 */
	@BeforeClass
	public static void setUpClass() throws Exception {
	}

	/**
	 * @throws java.lang.Exception
	 */
	@AfterClass
	public static void tearDownClass() throws Exception {
	}

	/**
	 * @throws java.lang.Exception
	 */
	@Before
	public void setUp() throws Exception {
	}

	/**
	 * @throws java.lang.Exception
	 */
	@After
	public void tearDown() throws Exception {
	}
	/**
	 * Test method for {@link br.com.devmedia.completeswingapp.dao.UserDAO#addUser(br.com.devmedia.completeswingapp.entity.User)}.
	 */
	@Test
	public void testAddUser() throws Exception {
		System.out.println("addUser");
		User usr = new User();
		usr.setName("Test User");
		usr.setLogin("test");
		usr.setPassword("test123");
		UserDAO instance = new UserDAO();
		idOfUser = instance.addUser(usr);
		User result = instance.getUser(idOfUser);
		assertEquals(idOfUser, result.getId());
	
	}
	
	/**
	 * Test method for {@link br.com.devmedia.completeswingapp.dao.UserDAO#getUser(int)}.
	 */
	@Test
	public void testGetUser()  throws Exception{
		System.out.println("getUser");
		int idUser = idOfUser;
		UserDAO instance = new UserDAO();
		Integer expResult = idOfUser;
		User result = instance.getUser(idUser);
		assertEquals(expResult, result.getId());
	}
	

	/**
	 * Test method for {@link br.com.devmedia.completeswingapp.dao.UserDAO#updateUser(br.com.devmedia.completeswingapp.entity.User)}.
	 */
	@Test
	public void testUpdateUser() throws Exception{
		System.out.println("updateUser");
		UserDAO instance = new UserDAO();
		User usr = instance.getUser(idOfUser);
		usr.setName("Test Test NOW");
		instance.updateUser(usr);
		usr = instance.getUser(idOfUser);
		assertEquals(usr.getName(), "Test Test NOW");
	}



	/**
	 * Test method for {@link br.com.devmedia.completeswingapp.dao.UserDAO#removeUser(int)}.
	 */
	@Test
	public void testRemoveUser() throws Exception{
		System.out.println("removeUser");
		UserDAO instance = new UserDAO();
		instance.removeUser(idOfUser);
	}


	

}

e agora o erro que esta dano

com.microsoft.sqlserver.jdbc.SQLServerException: Nome de objeto 'users' inválido.
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:156)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1373)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:371)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:322)
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4003)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1550)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:160)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:133)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeQuery(SQLServerPreparedStatement.java:265)
at br.com.devmedia.completeswingapp.dao.GenericDAO.executeQuery(GenericDAO.java:42)
at br.com.devmedia.completeswingapp.dao.GenericDAO.getNextId(GenericDAO.java:56)
at br.com.devmedia.completeswingapp.dao.UserDAO.addUser(UserDAO.java:11)
at br.com.devmedia.completeswingapp.dao.UserDAOTest.testAddUser(UserDAOTest.java:61)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:30)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:30)
at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

5 Respostas

tveronezi

parece que está relacionado em como vc se conecta no banco.
dá uma olhada nessa thread e veja se ajuda em alguma coisa: http://stackoverflow.com/questions/909599/java-mssql-java-sql-sqlexception-invalid-object-name-tablename

jhaga
Grohl:
package br.com.devmedia.completeswingapp.dao;

...
public class UserDAO extends GenericDAO {
	
		usr.setId(getNextId("users")); // linha 11
...
}
public class UserDAOTest {

		idOfUser = instance.addUser(usr); // linha 61

e agora o erro que esta dano

at br.com.devmedia.completeswingapp.dao.GenericDAO.executeQuery(GenericDAO.java:42)
at br.com.devmedia.completeswingapp.dao.GenericDAO.getNextId(GenericDAO.java:56)
at br.com.devmedia.completeswingapp.dao.UserDAO.addUser(UserDAO.java:11)
at br.com.devmedia.completeswingapp.dao.UserDAOTest.testAddUser(UserDAOTest.java:61)

E essa classe GenericDAO? Posta ae.

G

Pessoal a classe que estava faltando.
Eu ainda nao descobrir o erro

package br.com.devmedia.completeswingapp.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;

public abstract class GenericDAO {
	
	private static String USUARIO = "sa";
	private static String PASSWORD = "renato010806";
	private static String URL = "jdbc:sqlserver://localhost:1433;" +"databaseName=aj;";
	
	public Connection getConnection() {
		try {
			Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
			Connection cx = DriverManager.getConnection(URL, USUARIO, PASSWORD);
			return cx;
		} catch (Exception ex) {
			Logger.getLogger(GenericDAO.class.getName()).log(Level.SEVERE, null, ex);
			return null;
		}		
	}
	
	public Statement getStatement() throws SQLException{
		return getConnection().createStatement();
	}
	
	public PreparedStatement getStatement(String st) throws SQLException{
		return getConnection().prepareStatement(st);
	}
	
	public ResultSet executeQuery(String query, Object... params) throws SQLException{
		PreparedStatement ps = getStatement(query);
		for(int i = 0; i< params.length; i++){
			ps.setObject(i+1, params[i]);
		}
		return ps.executeQuery();
	}
	
	public int executeCommand(String query, Object... params) throws SQLException{
		PreparedStatement ps = getStatement(query);
		for(int i = 0; i< params.length; i++){
			ps.setObject(i+1, params[i]);
		}
		int result = ps.executeUpdate();
		ps.close();
		return result;
	}
	
	public Integer getNextId(String tableName) throws SQLException{
		ResultSet rs = executeQuery("select max(id) from "+tableName);
		rs.next();
		Object result = rs.getObject(1);
		if(result == null){
			rs.close();
			return 1;
		} else {
			return ((Integer) result)+1;
		}
	}
}
G

Ola pessoal obrigado pela atenção!
Achei o erro o banco de dados que estava conectando era diferenta da minha tabela, só foi eu trocar do banco de dados que tem a tabela e deu certo!

G

Ja esta corrigido o erro

Criado 16 de agosto de 2012
Ultima resposta 18 de ago. de 2012
Respostas 5
Participantes 3