2016-05-04 3 views
0

Я новичок в модульном тестировании, и мне нужно проверить команду вставки в моем коде. Может кто-нибудь, пожалуйста, дайте мне знать, как это сделать. Следующим является метод, который я хочу проверить.Тест модуля для команды вставки

public void InsertData() 
    {   
     Connect();  
     query = "Insert into Person values ('"+ name +"','"+ address +"','"+ 
     phn +"')";    
     cmd = new SqlCommand(query, Conn);      
     cmd.ExecuteNonQuery(); 
     DisConnect(); 
    } 
+0

вы СВАО читать: https://msdn.microsoft.com/en -us/library/ms182532.aspx –

+0

Вы должны изменить свой метод для тестирования таким образом, чтобы он использовал экземпляры без ссылок на базу данных. Насколько я вижу, вам нужны контексты Интерфейсы, которые имеют такие методы, как connect и disconnect, и интерфейсы команд, которые имеют такие методы, как ExecueNonQuery и ExecuteQuery и т. Д. Когда метод реорганизуется, вы можете протестировать метод. Возможно, вы также должны использовать инъекцию зависимостей. –

ответ

2

В настоящий момент ваш метод не поддается тестированию. Все ссылки на реальные данные следует избегать.

Это было бы реструктурировать метод:

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); 
    } 
} 
Смежные вопросы