создание тестового жгута (модульный тест)

#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 или одну из новых платформ изоляции. Запись / воспроизведение вышли из моды.