Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 除了集成测试之外,单元测试还会为DAL提供者的示例增加任何价值吗? public List GetPortfolioList() { 使用(var connection=newsqlconnection(“”) 使用(var命令=新的SqlCommand(“选择*来自组合”,连接)) { connection.Open(); var portfolioTable=SqlHelper.GetDataTable(命令); var投资组合=来自数据行 在portfolioTable中。行 选择int.Parse(行[“公文包”].ToString()); 返回投资组合。ToList(); } }_C#_Unit Testing_Tdd_Integration Testing - Fatal编程技术网

C# 除了集成测试之外,单元测试还会为DAL提供者的示例增加任何价值吗? public List GetPortfolioList() { 使用(var connection=newsqlconnection(“”) 使用(var命令=新的SqlCommand(“选择*来自组合”,连接)) { connection.Open(); var portfolioTable=SqlHelper.GetDataTable(命令); var投资组合=来自数据行 在portfolioTable中。行 选择int.Parse(行[“公文包”].ToString()); 返回投资组合。ToList(); } }

C# 除了集成测试之外,单元测试还会为DAL提供者的示例增加任何价值吗? public List GetPortfolioList() { 使用(var connection=newsqlconnection(“”) 使用(var命令=新的SqlCommand(“选择*来自组合”,连接)) { connection.Open(); var portfolioTable=SqlHelper.GetDataTable(命令); var投资组合=来自数据行 在portfolioTable中。行 选择int.Parse(行[“公文包”].ToString()); 返回投资组合。ToList(); } },c#,unit-testing,tdd,integration-testing,C#,Unit Testing,Tdd,Integration Testing,在SQLDAL提供程序中使用此方法检索投资组合列表,如名称(和代码)所示。因为用于集成测试的数据库表包含一组相当静态的数据,所以我们可以根据几个期望来断言。e、 g.投资组合清单将: -不是空的 -包含某些已知值 -不包含重复项 经过同行评审后,有人坚持认为该代码没有得到正确的测试(单独测试),因为它依赖于数据库访问。在确保该方法从一个状态有保证的数据库返回数据的情况下,我无法看到模拟数据库调用以编写该方法的单元测试的值。我遗漏了什么吗?我同意你的看法,这里唯一的价值就是集成测试,没有学究气的话

在SQLDAL提供程序中使用此方法检索投资组合列表,如名称(和代码)所示。因为用于集成测试的数据库表包含一组相当静态的数据,所以我们可以根据几个期望来断言。e、 g.投资组合清单将: -不是空的 -包含某些已知值 -不包含重复项


经过同行评审后,有人坚持认为该代码没有得到正确的测试(单独测试),因为它依赖于数据库访问。在确保该方法从一个状态有保证的数据库返回数据的情况下,我无法看到模拟数据库调用以编写该方法的单元测试的值。我遗漏了什么吗?

我同意你的看法,这里唯一的价值就是集成测试,没有学究气的话,单元测试就没有什么意义了

当然,此方法的任何调用方的单元测试代码都应该模仿此方法


E:在这种情况下,MutWaldMatt提到的例外情况将是我唯一值得考虑的单元测试。

< P>该方法使用LINQ将一些值从DB投射到一个整数列表中。您可能想测试它是否正确。

我将代码分为两部分—数据检索和投影(Linq查询)—然后可以使用模拟数据测试Linq查询,而无需模拟数据库


我还要说,单元测试数据访问代码没有什么价值。

作为测试纯粹主义者,我相信我不能“单元测试”DAL,因为我不能孤立地进行。这意味着我的一部分代码,即与数据库交互的代码,没有进行单元测试。上面的代码看起来不错;只需确保它作为更大契约的一部分存在,您可以在其他对象中进行测试


不过,我确实执行了集成测试,通过构建一个数据库,对其进行种子设定,并确保我的DAL工作。

我会持相反的观点,因为我刚刚编写了一个假的db(使用内存列表),以使linq to sql(或linq to anything)单元可测试

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

我现在可以运行单元测试,这些测试的成功与否取决于我的linq查询的适用性,即使数据库已从墙上拔下

例如,如果行[“Portfolio”].ToString()为空,代码将如何反应?如果不返回任何行或返回2,代码将如何反应


即使你只是在做集成测试,但这并不是一种不好的集成测试方式,只要小心不要称之为单元测试,以免纯粹主义者对此感到不安。

但这两件事都不是单元测试他的代码。一件是测试Linq实现,另一件是集成测试db代码。@kekekela-不,你将测试他对linq的使用是否如预期的那样,也就是说,他做得正确。
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();
    }
}