如何在单元测试中为TestCase属性设置随机字符串?如何在c#中创建一个带有随机输入的测试?
[Test]
[TestCase("")]
public async Task TestGet(string inp){....}
public string CreateRandomString(int size)
{
StringBuilder builder = new StringBuilder();
Random random = new Random();
char c;
for (int i = 0; i < size; i++)
{
c = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() +
65)));
builder.Append(c);
}
return builder.ToString();
}
使用NUnit,您可以使用TestCaseSource
:
[Test]
[TestCaseSource(nameof(CreateRandomStrings))]
public void TestGet(string input)
{
// your test ...
}
public IEnumerable<string> CreateRandomStrings()
{
// create 5 random strings
for (int i = 0; i < 5; ++i)
{
yield return CreateRandomString(10);
}
}
private static readonly Random random = new Random();
public string CreateRandomString(int size)
{
StringBuilder builder = new StringBuilder();
char c;
for (int i = 0; i < size; i++)
{
c = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() + 65)));
builder.Append(c);
}
return builder.ToString();
}
您可以使用TestCaseSource
属性来执行此操作:
public static string RandomString()
{
const string alphabet = "abcdefghijklmnopqrstuvwyxzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
int size = 50;
char[] chars = new char[size];
for (int i = 0; i < size; i++)
{
Random rand = new Random();
chars[i] = alphabet[rand.Next(alphabet.Length)];
}
var a = new string(chars);
return a;
}
[Test]
[TestCaseSource(nameof(RandomString))]
public void TestGet(string random)
{
// Do something
}