gpt4 book ai didi

C# + N单元 : Unit testing methods with byte array arguments

转载 作者:行者123 更新时间:2023-11-30 19:41:52 24 4
gpt4 key购买 nike

我想为一些带有字节数组参数的方法的类编写单元测试。 总共有大约 100 个方法,数组大小从 5-10 到几百个字节不等。 我应该如何生成和存储测试数组?

  1. 我应该手动生成它们还是通过一些生成器代码(也应该进行单元测试)生成它们?
  2. 我应该在测试期间在内存中生成它们,还是应该提前生成它们并将它们存储在某个地方?
  3. 在后一种情况下,我应该将它们存储在文件中(即使单元测试不应该触及文件系统),还是应该将它们存储在测试代码本身中(例如,以十六进制格式的字符串,像这样:“47 08 00 14 等”)?

我开始手动创建它们并将它们以十六进制字符串的形式存储在测试代码中。我经常使用这样的二进制字符串,所以我可以相对轻松地阅读它们(“我什至没有看到代码。我只看到金发女郎、黑发女郎、红发女郎。”)问题是,这种方法很慢,而且我认为使用自动生成器会导致更易于维护的测试。但是我应该如何测试生成器的输出是否正确呢?听起来像第二十二条军规...

最佳答案

我假设您希望字节实际表示可反序列化的对象,而不仅仅是随机的。一百个字节左右可以构成一个小的 base64 编码字符串。您可以将测试输入保存为 base 64 编码字符串,然后测试可以获取正确的输入并将其转换为字节:

    const string someScenario = 
"R0lGODlhAQABAIAAAAAAAAAAACH5BAAAAAAALAAAAAABAAEAAAICTAEAOw==";

byte[] bytes = Convert.FromBase64String(someScenario);

你可以通过你的序列化器提前弄清楚字符串是什么,比如

public string SerializeAsBase64()
{
var session = new SessionCredentials { SessionKey = Guid.NewGuid() };

using (var mem = new MemoryStream())
{
var formatter = new BinaryFormatter();
formatter.Serialize(mem, session);

var bytes = mem.ToArray();

return Convert.ToBase64String(bytes);
}
}

为确保其正常工作,您是否也有反序列化器...?序列化然后反序列化然后比较原件是否相等?

关于C# + N单元 : Unit testing methods with byte array arguments,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18441495/

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