gpt4 book ai didi

c# - 除了集成测试之外,单元测试是否会为这个 DAL 提供程序示例增加任何值(value)?

转载 作者:行者123 更新时间:2023-11-30 13:41:46 24 4
gpt4 key购买 nike

public List<int> GetPortfolioList()
{
using (var connection = new SqlConnection("<connectionString>"))
using (var command = new SqlCommand("SELECT * FROM Portfolio", connection))
{
connection.Open();
var portfolioTable = SqlHelper.GetDataTable(command);
var portfolios = from DataRow row
in portfolioTable.Rows
select int.Parse(row["Portfolio"].ToString());

return portfolios.ToList();
}
}

如名称(和代码)所示,在 SQL DAL 提供程序中使用此方法来检索投资组合列表。因为用于集成测试的数据库表包含一组相当静态的数据,我们可以针对多种预期进行断言。例如投资组合列表将:- 不为空- 包含某些已知值- 不包含重复

在同行评审之后,有人坚持认为此代码没有经过适当的(孤立的)测试,因为它依赖于数据库访问。如果发现大部分值(value)在于确保此方法从状态有保证的数据库返回数据,我一直无法看到模拟数据库调用以为此方法编写单元测试的值(value).我错过了什么吗?

最佳答案

我会持相反的观点,因为我刚刚写完一个假数据库(在内存列表中使用)来使 linq to sql(或 linq to anything)单元测试。

这是我用来选择一种合适的方法来伪造/模拟数据库的一个问题。 (尽管通过阅读你的代码,嵌入的“SELECT * FROM”意味着你更依赖于 SQL 而不是 linq,这将使你更难将你的代码分解为 必须 由 SQL Server 执行的内容以及 linq 能够处理的东西。

How are people unit testing code that uses Linq to SQL

我现在可以运行单元测试,根据我的 linq 查询的适用性,单元测试会成功或失败即使数据库从墙上拔下也是如此

例如,如果 row["Portfolio"].ToString() 为 null,您的代码如何 react ,当它不返回任何行或返回 2 时,代码如何 react ?

即使你只做集成测试,nunit 也不是集成测试的坏方法,只是要小心不要称它们为单元测试,以免纯粹主义者对此感到不安。

关于c# - 除了集成测试之外,单元测试是否会为这个 DAL 提供程序示例增加任何值(value)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4628711/

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