Как издеваться над Идатаридером, чтобы получить более 1 записи в тестировании XUNIT ⇐ C#

Место общения программистов C#
Anonymous
Как издеваться над Идатаридером, чтобы получить более 1 записи в тестировании XUNIT

Сообщение Anonymous »

Я разработал проект ASP.net Core 8 MVC и хочу проверить все методы действия, используя тестирование XUNIT. Но когда я хочу прочитать данные из базы данных, используя Idatareader , код бросает NullReferenceException .
Это мой код тестирования XUNIT:
private static void SetupNextRow(Mock mockDataReader, DataTable table, ref int rowIndex)
{
if (rowIndex >= table.Rows.Count) return;
var row = table.Rows[rowIndex];

for (int columnIndex = 0; columnIndex < row.ItemArray.Length; columnIndex++)
{
DataColumn column = (DataColumn)table.Columns[columnIndex];

switch (column.ColumnName.ToString())
{
case "ID":
mockDataReader.Setup(r => r.GetInt32(It.Is(x => x == columnIndex))).Returns((Int32)row[columnIndex]);
break;

case "UserName":
mockDataReader.Setup(r => r.GetString(It.Is(x => x == columnIndex))).Returns((string)row[columnIndex]);
break;

case "FirstName":
mockDataReader.Setup(r => r.GetString(It.Is(x => x == columnIndex))).Returns((string)row[columnIndex]);
break;

case "LastName":
mockDataReader.Setup(r => r.GetString(It.Is(x => x == columnIndex))).Returns((string)row[columnIndex]);
break;

default:
break;
}
}

rowIndex++;
}
< /code>

Код: Выделить всё

HomeController.Index()
Метод:

Код: Выделить всё

public async Task Index()
{
List users = new();
var listPaginated = (List)await _EShopUserService.GetAllUsersAsync();

foreach (EShopUser item in listPaginated)
{
users.Add(new EShopUser(item.ID, item.UserName, item.FirstName, item.LastName));
}

return View(users);
}

public async Task GetAllUsersAsync()
{
return await _EShopUserRepository.GetAllUsersAsync();
}

private readonly IDbConnection _connection = null;

public EShopUserRepository(Func dbConnection)
{
_connection = dbConnection.Invoke();
}

public async Task GetAllUsersAsync()
{
List users = new List();

var t = await Task.Run(() =>
{
using (_connection)
{
_connection.Open();
IDbCommand cmd = _connection.CreateCommand();
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.CommandText = "GetAllUser";
IDataReader userReader = cmd.ExecuteReader();
while (userReader.Read())
{
users.Add(new EShopUser((int)userReader["ID"], (string)userReader["UserName"], (string)userReader["FirstName"], (string)userReader["LastName"]));
}
}
return Task.FromResult(users);
});

return t;
}
< /code>
When I debug the GetAllUsersAsync
Метод, объект пользователя является нулевым, поэтому он бросает nullreferenceexception . Что не так?


Подробнее здесь: https://stackoverflow.com/questions/796 ... it-testing

Вернуться в «C#»