#unit-testing #testing #nunit #moq
#модульное тестирование #тестирование #nunit #moq
Вопрос:
Я должен создать тест для этого класса. Кто-нибудь может помочь, как это сделать.
public class Db {
private System.Data.SqlClient.SqlConnection myConn;
public Db(string connString)
{
myConn = new System.Data.SqlClient.SqlConnection(connString);
}
public bool Connected
{
get { return (myConn.State == ConnectionState.Open); }
}
public void Connect()
{
myConn.Open();
}
public void Disconnect()
{
myConn.Close();
}
}
Да, строка подключения может быть передана в качестве параметра конструктора.
С уважением
Yahoo
Комментарии:
1. В настоящее время в этом классе нет особого поведения. Если вы не планируете добавлять дополнительные методы, вы могли бы рассмотреть возможность выполнения Extract Interface в class Db и создания интерфейса IDb. Внедрите это в другие классы и протестируйте их. Однако, если вы планируете добавить функциональность в class Db, вы, вероятно, захотите протестировать ее.
Ответ №1:
Ваша единственная зависимость (SqlConnection) не поддается инъекции, поэтому первое, что нужно сделать, это, по крайней мере, установить цепочку конструктора внедрения зависимостей Poor Man, позволяющую передавать SqlConnection в качестве параметра. Кроме этого, я вижу, что этот класс делает очень мало, но действует как оболочка для соединения. Возможно, я бы абстрагировал соединение как IDbConnection и при необходимости смоделировал его, например, метод test for Connected был бы чем-то вроде:
IDbConnection conn = mockery.CreateMock<IDbConnection>();
Expect.Call(connection.State).Return(ConnectionState.Open);
mockery.ReplayAll();
Assert.IsTrue(db.Connected);
mockery.VerifyAll();
Подключение / отключение можно имитировать аналогичным образом.
Комментарии:
1. возможно, вы захотите взглянуть на Moq, Rhino Mocks или одну из новых платформ изоляции. Запись / воспроизведение вышли из моды.