Я пытаюсь научиться делать Unit Testing и Mocking. Я понимаю некоторые принципы TDD и базового тестирования. Тем не менее, я смотрю на рефакторинг ниже кода, который был написан без тестов, и я пытаюсь понять, как это нужно изменить, чтобы сделать его проверяемым.
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);
}
}
Эти два метода находятся в одном классе. Код, связанный с базой данных в базе данных GetAgentFrom, связан с корпоративными библиотеками.
Как я могу сделать это для проверки? Должен ли я абстрагировать метод GetAgentFromDatabase в другом классе? Должен ли GetAgentFromDatabase возвращать нечто иное, чем IDataReader? Любые предложения или указатели на внешние ссылки были бы весьма полезны.