Я следовал Запрос на вставку в базу данных MySQL с использованием Moq в качестве руководства для выполнения moq. В моем случае я буду делать moq с postgesql.
Контрольный пример пройден. Однако у меня есть вопрос: почему «Запрос на обновление успешно выполнен» отображается, когда состояние соединения postgresql закрыто? Это ожидаемый результат, когда мы делаем moq? Если это не ожидаемый результат, что мне делать?
Заранее спасибо.
Вот результат консоли после выполнения этого теста.
УСТАНОВКА УСТРОЙСТВ ОБНОВЛЕНИЯ user_id = null WHERE camera_id = 'G41140'
Установлено соединение
Состояние До открытия: Закрыто
Состояние После открытия: Закрыто
Обновление успешно выполнено.
Это часть моего кода
[Test, Order(1)]
public void UpdateTest()
{
//Arrange
DumpDatabase databaseSetting = new DumpDatabase();
//Assume, fill the right setting for db
databaseSetting.Host = "***.***.*.**";
databaseSetting.Port = "****";
databaseSetting.Database = "*****";
databaseSetting.UserName = "******";
databaseSetting.Password = "***********";
var commandMock = new Mock<IDbCommand>();
commandMock
.Setup(m => m.ExecuteNonQuery())
.Verifiable();
var connectionMock = new Mock<IDbConnection>();
connectionMock
.Setup(m => m.CreateCommand())
.Returns(commandMock.Object);
var connectionFactoryMock = new Mock<IDbConnectionFactory>();
connectionFactoryMock
.Setup(m => m.CreateConnection())
.Returns(connectionMock.Object);
var sut = new DumpConnection(connectionFactoryMock.Object, databaseSetting);
// Act
sut.Update();
// Assert
commandMock.Verify();
}
public class DumpConnection : IDbConnectionFactory
{
DumpDatabase _databaseSetting;
private IDbConnectionFactory connectionFactory;
public DumpConnection(IDbConnectionFactory connectionFactory, DumpDatabase databaseSetting)
{
this.connectionFactory = connectionFactory;
this._databaseSetting = databaseSetting;
}
public IDbConnection CreateConnection()
{
return new NpgsqlConnection("Server=" + _databaseSetting.Host + ";User Id=" + _databaseSetting.UserName + "; " +
"Password=" + _databaseSetting.Password + ";Database=" + _databaseSetting.Database + ";");
}
public void Update()
{
string query = "UPDATE DEVICES SET user_id=null WHERE camera_id = 'G41140' ";
Console.WriteLine(query);
using (var connection = connectionFactory.CreateConnection())
{
//Creates and returns a MySqlCommand object associated with the MySqlConnection.
using (var command = connection.CreateCommand())
{
command.CommandText = query;
Console.WriteLine("Established connection");
Console.WriteLine("State Before open : " + connection.State);
connection.Open();
Console.WriteLine("State After open : " + connection.State);
Console.WriteLine("Update query succesfully executed.");
}
}
}
}
public interface IDbConnectionFactory
{
IDbConnection CreateConnection();
}