gpt4 book ai didi

c# - 将 'TestCase' 属性与二维数组一起使用

转载 作者:太空狗 更新时间:2023-10-29 18:28:57 26 4
gpt4 key购买 nike

我正在使用 NUnit 并尝试为以下方法实现测试:它应该接受两个整数并返回二维数组。所以,我的测试标题看起来像:

[TestCase(5, 1, new int[,]{{1}, {2}, {3}, {4}, {5}})]
public void MyTestMethod(int a, int b, int[][] r)

编译过程中出现如下错误:

Error CS0182: An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type (CS0182)


我知道可以使用 TestCaseSource 来引用对象数组,例如以下问题的答案:

给出的代码如下:

private object[][] combination_tests =  new [] {
new object[] {5, 1, new [,]{{1}, {2}, {3}, {4}, {5}}},
};

[Test]
[TestCaseSource("combination_tests")]
public void MyTestMethod(int a, int b, int[,] r)

但我仍然有一个问题:是否可以只使用 TestCase 属性来做到这一点?

最佳答案

您是否绝对需要为您的方法设置相同的签名,即

public void MyTestMethod(int a, int b, int[][] r)
{
// elided
}

根据您的情况,您有两个选项可用,它们都使用 [TestCase]您在问题中所说的属性:

is it possible to do that with using only the TestCase attribute?

我更喜欢第一个选项,因为它感觉更简洁,但两者都能满足您的需求。


选项 1:如果不需要保留相同的签名

您可以修改 签名,这样您就可以传入一个字符串 ( which is compile-time constant ) 而不是数组(不是编译时常量),它可用于获取 改为数组,例如

private static int[][] getArrayForMyTestMethod(string key)
{
// logic to get from key to int[][]
}

[TestCase(5, 1, "dataset1")]
public void MyTestMethod(int a, int b, string rKey)
{
int[][] r = getArrayForMyTestMethod(rKey);
// elided
}

选项 2:如果有必要保留相同的签名

如果需要为方法保持相同的签名,您可以使用与选项 1 相同的包装方法,即

private static int[][] getArrayForMyTestMethod(string key)
{
// logic to get from key to int[][]
}

[TestCase(5, 1, "dataset1")]
public void MyTestMethodWrapper(int a, int b, string rKey)
{
int[][] r = getArrayForMyTestMethod(rKey);
MyTestMethod(a, b, r);
}

public void MyTestMethod(int a, int b, int[][] r)
{
// elided
}

很明显,您可以使用任何可以作为编译时常量的类型来代替 string,具体取决于测试用例的构建方式,但我建议使用 string,因为这样您就可以在 NUnit 运行程序中为您的测试用例指定一个名称


否则你的选择是使用 [TestCaseSource]正如您在问题中提到的。

关于c# - 将 'TestCase' 属性与二维数组一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29721444/

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