Estoy tratando de aprender cómo hacer pruebas unitarias y burlas. Entiendo algunos de los principios de TDD y pruebas básicas. Sin embargo, estoy buscando refacturar el siguiente código que se escribió sin pruebas y estoy tratando de entender cómo debe cambiar para que sea comprobable.¿Cómo podría refactorizar este método de fábrica y la llamada a la base de datos para poder probarlo?
public class AgentRepository
{
public Agent Select(int agentId)
{
Agent tmp = null;
using (IDataReader agentInformation = GetAgentFromDatabase(agentId))
{
if (agentInformation.Read())
{
tmp = new Agent();
tmp.AgentId = int.Parse(agentInformation["AgentId"].ToString());
tmp.FirstName = agentInformation["FirstName"].ToString();
tmp.LastName = agentInformation["LastName"].ToString();
tmp.Address1 = agentInformation["Address1"].ToString();
tmp.Address2 = agentInformation["Address2"].ToString();
tmp.City = agentInformation["City"].ToString();
tmp.State = agentInformation["State"].ToString();
tmp.PostalCode = agentInformation["PostalCode"].ToString();
tmp.PhoneNumber = agentInformation["PhoneNumber"].ToString();
}
}
return tmp;
}
private IDataReader GetAgentFromDatabase(int agentId)
{
SqlCommand cmd = new SqlCommand("SelectAgentById");
cmd.CommandType = CommandType.StoredProcedure;
SqlDatabase sqlDb = new SqlDatabase("MyConnectionString");
sqlDb.AddInParameter(cmd, "AgentId", DbType.Int32, agentId);
return sqlDb.ExecuteReader(cmd);
}
}
Estos dos métodos son de una sola clase. El código relacionado con la base de datos en GetAgentFromDatabase está relacionado con Enterprise Libraries.
¿Cómo podría hacer para que este comprobable? ¿Debo abstraer el método GetAgentFromDatabase en una clase diferente? ¿Debería GetAgentFromDatabase devolver algo que no sea un IDataReader? Cualquier sugerencia o sugerencia a enlaces externos sería muy apreciada.