В настоящий момент ваш метод не поддается тестированию. Все ссылки на реальные данные следует избегать.
Это было бы реструктурировать метод:
public interface IDbContext
{
void Connect();
void DisConnect();
IDbCommand GetDbCommand(string query, string[] parameters);
}
public class DbContext : IDbContext
{
public IDbConnection Conn { get; set; }
public void Connect()
{
// your code here
}
public void DisConnect()
{
// your code here
}
public IDbCommand GetDbCommand(string query, string[] parameters)
{
// parameter handling
return new SqlCommand(query, (SqlConnection)Conn);
}
}
public class YourClass
{
private string name;
private string address;
private string phn;
public void InsertData(IDbContext context)
{
context.Connect();
var cmd = context.GetDbCommand("Insert into Person values ('{0}','{1}','{2}')", new string[] { name, address, phn });
cmd.ExecuteNonQuery();
context.DisConnect();
}
}
Чтобы проверить это, вы можете сделать это, как этот метод:
[TestClass]
public class TestClass
{
[TestMethod]
public void TestMethod1()
{
var instance = new YourClass();
// create an instance of IDbContext
var context = new Mock<IDbContext>();
// create an instance of IDbCommand
var command = new Mock<IDbCommand>();
// setup your context and what should be the return of any method you want
context.Setup(c => c.GetDbCommand(It.IsAny<string>(), It.IsAny<string[]>())).Returns(command.Object);
// call your method you want to test
instance.InsertData(context.Object);
// assert that context methods ar called
context.Verify(c => c.Connect(), Times.Once);
context.Verify(c => c.DisConnect(), Times.Once);
context.Verify(c => c.GetDbCommand(It.IsAny<string>(), It.IsAny<string[]>()), Times.Once);
// assert that command methods ar called
command.Verify(c => c.ExecuteNonQuery(), Times.Once);
}
}
вы СВАО читать: https://msdn.microsoft.com/en -us/library/ms182532.aspx –
Вы должны изменить свой метод для тестирования таким образом, чтобы он использовал экземпляры без ссылок на базу данных. Насколько я вижу, вам нужны контексты Интерфейсы, которые имеют такие методы, как connect и disconnect, и интерфейсы команд, которые имеют такие методы, как ExecueNonQuery и ExecuteQuery и т. Д. Когда метод реорганизуется, вы можете протестировать метод. Возможно, вы также должны использовать инъекцию зависимостей. –