gpt4 book ai didi

c# - 插入命令的单元测试

转载 作者:行者123 更新时间:2023-11-29 07:18:30 27 4
gpt4 key购买 nike

我是单元测试新手,我需要在代码中测试插入命令。谁能告诉我该怎么做。以下是我想测试的方法。

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

最佳答案

目前您的方法不可测试。应避免所有对真实数据的引用。

这将是一个重构的方法:

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);
}
}

关于c# - 插入命令的单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37022306/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com