如果我需要检查函数的参数?

问题描述 投票:0回答:1

我正在使用 C# 中的 MSTest 编写单元测试。

函数的最终目标是确保我们能够获取到数据。

我们要测试的函数是这样的:

public static GetMemberName(string member_id) 
{
  DataTable dt = new DataTable();

  string memberName;

  String sql = @"SELECT name from MEMBER_GROUP where Member_Id = @Member_Id";

  dt = SqlProvider.dbGetDataTable("MY_Table", sql, 

  SqlParameterBuilder.AddParameter("Member_Id ", member_id));

  if ((dt != null) && dt.Rows.Count > 0)
  {
    for (int i = 0; i <= dt.Rows.Count - 1; i++)
    {
      memberName = dt.Rows[i][0].ToString();
    }
  }

  return memberName;
}

SqlParameterBuilder.AddParameter("Member_Id ", member_id)
会在builder中添加参数,当
@"SELECT name from MEMBER_GROUP where Member_Id = "123"
时,使sql行等于
member_id = "123"

我很困惑是否需要检查

sql
变量是否等于

@"SELECT name from MEMBER_GROUP where Member_Id = @Member_Id"`;

并检查是否

SqlParameterBuilder.AddParameter("Member_Id ", member_id)

有效(换句话说,检查函数的参数

dbGetDataTable
),或者只是伪造dbGetDataTable的返回值?

如果我需要检查,我该怎么做?

c# unit-testing mstest
1个回答
0
投票

安全网

您可以将单元测试视为开发安全网。他们会尽力帮助您摆脱某些问题。您拥有的测试用例越多,您就越能安全地应对常见的陷阱。

您可以广泛地测试您的代码,但它们可能无法捕获所有意外的更改。您的安全网的主要目标应该是捕获那些具有中等或高概率的“常见”意外变化。因此,尝试集中精力用测试用例覆盖这些代码行,这些代码行可能会在不久的将来进行修改。

黑盒 vs 灰盒 vs 白盒

让我引用此表第二行:

  • 黑盒也称为功能测试、数据驱动测试和闭盒测试。
  • 白盒也称为结构测试、明盒测试、基于代码的测试和透明测试。
  • 灰盒也称为半透明测试,因为测试人员的编码知识有限。

正如您所看到的,这些方法之间的主要区别在于测试用例对待测试代码的“了解”程度。在白盒测试的情况下,测试也涵盖了实现细节。而在黑盒测试中,您将待测试的代码视为第三方混淆方法,这就是为什么您只关心输入、输出和潜在的副作用(如果有)。

所以,如果函数的最终目标是确保我们能够获取数据,那么我们正在讨论的是黑盒测试,其中您对 sql 查询一无所知,并且

SqlParameterBuilder

© www.soinside.com 2019 - 2024. All rights reserved.