Ошибка при тестировании xUnit при вставке пользователя в базу данныхC#

Место общения программистов C#
Ответить
Anonymous
 Ошибка при тестировании xUnit при вставке пользователя в базу данных

Сообщение Anonymous »

Я новичок в написании модульного тестирования.
Я пытаюсь написать модульный тест для вставки пользователя в базу данных, но получаю сообщение об ошибке.
Ошибка: System.NotSupportedException: Введите to макет (SqlConnection) должен быть интерфейсом, делегатом или незапечатанным, нестатическим классом.
У меня есть класс UserRepository:
public class UserRepository : IUSerRepository
{
public async Task InsertUserAsync(User user, SqlConnection connection, SqlTransaction transaction)
{

if (!await UserExistAsync(user.Email!, connection, transaction))
{

using (SqlCommand cmd = new SqlCommand("INSERT INTO users (FLO, email) VALUES (@Flo, @Email);SELECT SCOPE_IDENTITY();", connection, transaction))
{

cmd.Parameters.AddWithValue("@Flo", user.Flo);
cmd.Parameters.AddWithValue("@Email", user.Email);

object? res = await cmd.ExecuteScalarAsync();
return Convert.ToInt32(res);
}
}
else
{

using (SqlCommand cmd = new SqlCommand("SELECT user_id FROM users WHERE email = @Email", connection, transaction))
{

cmd.Parameters.AddWithValue("@Email", user.Email);

object? res = await cmd.ExecuteScalarAsync();

return Convert.ToInt32(res);
}
}
}

public async Task UserExistAsync(string userEmail, SqlConnection connection, SqlTransaction transaction)
{
using (SqlCommand cmd = new SqlCommand("SELECT COUNT(1) FROM users WHERE email = @Email", connection, transaction))
{
cmd.Parameters.AddWithValue("@Email", userEmail);
int count = Convert.ToInt32(await cmd.ExecuteScalarAsync());
return count > 0;
}
}
}

Мне нужно протестировать его методы
Я написал следующий класс для тестов, пока только 1 метод, но получил сообщение об ошибке
Тестовый класс:
public class UserRepositoryTests
{
private readonly Mock _mockConnection;
private readonly Mock _mockTransaction;
private readonly UserRepository _userRepository;

public UserRepositoryTests()
{
_mockConnection = new Mock();
_mockTransaction = new Mock();
_userRepository = new UserRepository();
}

[Fact]
public async Task UserRepository_InsertUserAsync_ShouldInsertNewUser_WhenUserDoesNotExist()
{
// Arrange
var mockCommand = new Mock();
mockCommand.Setup(cmd => cmd.ExecuteScalarAsync()).ReturnsAsync(1);

var mockUser = new User { Flo = "Иванов Иван Иванович", Email = "abc@email.com" };

var mockConnection = new Mock();
var mockTransaction = new Mock();

var userRepository = new Mock();
userRepository.Setup(repo => repo.UserExistAsync(It.IsAny(), It.IsAny(), It.IsAny()))
.ReturnsAsync(false); // Пользователь не существует

// Act
int result = await userRepository.Object.InsertUserAsync(mockUser, mockConnection.Object, mockTransaction.Object);

// Assert
Assert.Equal(1, result);
}
}


Подробнее здесь: https://stackoverflow.com/questions/790 ... e-database
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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