Я пытаюсь Moq метод, который имеет вызов SQL, но не в состоянии сделать это:
Ниже приведен код Moq / Unit Test:
DataTable dataTable = new DataTable();
Mock<IDataAccessHelper> mockDataAccessHelper = new Mock<IDataAccessHelper>();
mockDataAccessHelper.Setup(x => x.ExtractDataFromDB(It.Is<string>(query => query.Contains("StudentTable")), It.IsAny<object[]>())).Returns(dataTable);
// This is the data access class from where I am calling the ExtractDataFromDB method which I want to Moq
IDataAccess dataAccess = new DataAccess();
object[] studentIds = new object[] {100,101,102};
List<Student> studentData= dataAccess.GetData(studentIds);
Ниже приведен код для модульного теста:
public class DataAccess : IDataAccess
{
private IDataAccessHelper DataAccessHelper { get; set; }
public DataAccess()
{
DataAccessHelper = new DataAccessHelper();
}
public List<Student> GetData(object[] studentIds)
{
string query = "SELECT StudentName,Address,Marks FROM StudentTable WHERE StudentId = @StudentId"
DataTable table = DataAccessHelper.ExtractDataFromDB(query,studentIds);
List<Student> studentList = (from DataRow dr in dt.Rows
select new Student()
{
StudentName = dr["StudentName"].ToString(),
Address = dr["Address"].ToString(),
Marks= Convert.ToInt32(dr["Marks"])
}).ToList();
return studentList;
}
}
public interface IDataAccessHelper
{
DataTable ExtractDataFromDB(string query,object[] values);
}
public class DataAccessHelper : IDataAccessHelper
{
public DataTable ExtractDataFromDB(string query,object[] values)
{
foreach(var id in values)
{
// SQL Call
}
}
}
Итак, я хочу протестировать метод GetData, чтобы проверить в StudentList список идентификаторов учеников, и внутри него я пытаюсь вызвать метод ExtractDataFromDB, имеющий вызов SQL.
Любая помощь ???