Я новичок в написании модульного тестирования.
Я пытаюсь написать модульный тест для вставки пользователя в базу данных, но получаю сообщение об ошибке.
Ошибка: 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 = "[email protected]" };
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
Ошибка при тестировании xUnit при вставке пользователя в базу данных ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Laravel, jQuery: ДИНАМИЧЕСКАЯ ФОРМА КАЛЕНДАРЯ при вставке в базу данных ошибка
Anonymous » » в форуме Php - 0 Ответы
- 15 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Laravel, jQuery: ДИНАМИЧЕСКАЯ ФОРМА КАЛЕНДАРЯ при вставке в базу данных ошибка
Anonymous » » в форуме Jquery - 0 Ответы
- 17 Просмотры
-
Последнее сообщение Anonymous
-