c# - 为什么传递变量失败,错误值类型“字符串”无法转换为“字符串()”?
问题描述
我正在尝试使用 VB 为一些 C# 代码创建一个自动化测试。示例:对于表 Orchestra,我有 1 条组织 1123 的记录,其中用户 xxx 的值为 externalId = null,名称为 Charm White。所以我的测试是检查预期的 externalId 是否为空,并且该用户的名称是否为魅力白色。
但是,在 VB 代码中声明值类型 string[] externalIds 的变量时,会出现错误:
'String' 类型的值不能转换为 'string()'
这是要测试的 C# 代码:
public string[] GetNamesFromExternalIds(string organisationId, string[] externalIds)
{
string externalIdsString = null;
foreach (string externalId in externalIds)
{
if (externalIdsString != null)
{
externalIdsString += ",";
}
externalIdsString += "'" + externalId + "'";
}
DbParameterCollection parameters = new DbParameterCollection();
parameters.Add(new DbParameter("@OrganisationId",SqlDbType.NVarChar,
organisationId));
string sql = string.Format(@"SELECT ExternalId, Name FROM Orchestra
WHERE ExternalId IN ({0}) AND OrganisationId = @OrganisationId",
externalIdsString);
ListObject list = new ListObject(_Accessor);
list.Read(sql, parameters);
List<string> names = new List<string>();
foreach (string externalId in externalIds)
{
foreach (DataRow dataRow in list.Table.Rows)
{
if (dataRow["ExternalId"].ToString() == externalId)
{
names.Add(dataRow["Name"].ToString());
break;
}
}
names.Add(null);
}
return names.ToArray();
}
这是我正在尝试进入 VB 的内容:
<TestClass()> Public Class UT_GetNamesFromExternalIds
<TestMethod()> Public Sub GetNamesFromExternalIds()
Dim organisationId As String = "1123"
Dim externalIds() As String ={0}
Dim user as string = "XXX"
Dim names As String = String.Empty
Dim ExpNames As String = "Charm White"
Dim ExpexternalIds As String = Nothing
Dim DataServer As New DataServer()
Dim Accessor = DataServer.GetAccessor()
Dim _StandardHeader = New StandardHeader
Dim _AuditProvider = New Audit.AuditProvider(_StandardHeader)
Dim AD As New Ceridian.Administration.Authentication.AuthenticationData(Accessor, _AuditProvider)
externalIds = AD.GetNamesFromExternalIds(organisationId,
externalIds)
Assert.AreEqual(1, externalIds.Count)
Assert.AreEqual(ExpexternalIds, externalIds(0))
Assert.AreEqual(ExpNames, names)
Console.WriteLine(ExpNames)
Console.WriteLine(names)
Console.WriteLine(ExpexternalIds)
Console.WriteLine(externalIds)
End Sub
End Class
解决方案
假设您正在尝试传递0001214
到被测函数并期望Charm White
得到结果,那么您需要使用您的0001214
值创建一个字符串数组 - 将其传递给函数并测试结果:
Dim externalIds As String() = {"0001214"}
Dim organisationId As String = "1123"
Dim names = AD.GetNamesFromExternalIds(organisationId, externalIds)
Dim ExpNames As String = "Charm White"
Assert.AreEqual(1, names.Count)
Assert.AreEqual(ExpNames, names(0))
另外,删除该行:
Dim names As String = String.Empty
由于从被测函数返回的值是字符串数组而不是字符串。我还移动了您的声明,organisationId
以便它接近使用它的代码。
推荐阅读
- gnuplot - gnuplot 在同一个图表中绘制多个图
- python - 如何在类似 RHEL 的 Docker 映像中更新 FreeTDS 驱动程序?
- android - 如何替换已弃用的 KeyGenParameterSpec.Builder.setUserAuthenticationValidityDurationSeconds?
- python - 将文本 blob 转换为句子
- kql - Kusto.Explorer 需要辅助帐户才能访问 azure Log Analytics 工作区
- c++ - C++ 二次同余生成器
- windows - 如何使用“IF”语句确定要添加到 VMDK 的可用磁盘空间量?
- docusignapi - 嵌入式签名用户界面
- tree - 在具有特定序列的二叉树中查找路径
- typescript - 类方法的数组中的动态类型