我有一个如下的方法:
public void ImportDataCommand()
{
// some data validation logic here
if (some_criteria_is_true)
{
// Call to a method which uses sql queries to update some records
UpdateRecords();
}
else
{
// Call to a method which uses sql queries to delete some records
DeleteRecords();
}
}
- 如何对
UpdateRecords()
和DeleteRecords()
方法进行单元测试? (如果可能的话) - 我当前的模式是一种气味吗?
- 当您有一些数据更新逻辑依赖于一些数据验证逻辑和一些条件逻辑时,是否有更好的方法来处理?
更新
我对在这里模拟数据源不感兴趣。我想确保我的 SQL 查询是否正确并且正在执行正确的更新。很抱歉造成困惑,如果您认为我想测试我的验证逻辑而不是我的数据更新逻辑 (SQL)。
我确实有模拟框架的经验,并且我确实成功地使用它们为我的正常应用程序逻辑编写了单元测试。
最佳答案
您的问题以短语“以及”开头。
不要在同一个类中进行验证和数据访问 - 将数据访问委托(delegate)给另一个类并注入(inject)它 - 这样您就可以在测试验证时模拟数据源。
class Bar {
private DataAccessService service
public void Foo()
{
// some data validation logic here
if (some_criteria_is_true)
{
// Call to a method which uses sql queries to update some records
service.updateBarRecords();
}
else
{
// Call to a method which uses sql queries to delete some records
service.deleteBarRecords();
}
}
}
然后,您可以使用模拟框架来测试是否调用了正确的服务方法。
关于c# - 如何测试具有数据库查询来更新数据的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8182098/