程序破坏文件?

时间:2009-08-14 18:35:20

标签: c# .net

我知道你故意想要破坏文件似乎很荒谬,但我向你保证这是有充分理由的。

在我的应用程序中,我有很多xml序列化正在进行中。这反过来也意味着,我有很多反序列化。

今天我尝试了一些灾难情景。我在序列化操作期间重置服务器,正如预期的那样,它损坏了xml文件。

问题是,尝试在恰当的时间“关闭”服务器以破坏文件并不是最佳选择,首先是在其.0001 ms写入时间内捕获操作的运气,其次是服务器需要重新启动。由于其他原因从服务器拔出插头只是个坏主意。

是否有可以有效破坏文件的应用,以便此文件可用于在我的应用中进行测试?

7 个答案:

答案 0 :(得分:20)

hex editor中打开它并玩得很开心?

答案 1 :(得分:5)

这是Fuzz Testing背后的方法,即引入随机变体并查看应用程序如何应对。您可以查看引用链接中提到的一些模糊测试框架。但在你的情况下,使用随机生成器并在这些位置插入位来破坏它也同样容易。如果您有已知的案例,那么您当然可以使用现有的损坏文件。

答案 2 :(得分:2)

您是否尝试测试部分降级的文件?

如果您想测试程序对错误数据的反应,为什么不使用任何随机文本文件作为输入?

答案 3 :(得分:2)

有几种方法可以破坏XML文件。思考一些: - 不完整的XML标签(截断的XML)。 - 数据上的意外内容(二进制/更多文本)。  首先,我会复制一个“正确/完整”的XML文件,并手动修改它。对于第二个,我将部分XML文件与文件系统上的任何二进制文件连接起来。

Hex编辑器对我来说似乎有点太多了;)

答案 4 :(得分:1)

我强烈建议您不要执行“随机字节”损坏以进行测试。你不仅不知道你正在做什么测试状态,如果你发现了一个错误,你将很难保证下一个测试将验证修复。

我的建议是以可预测的方式手动(或以编程方式)破坏文件,以便您知道正在测试的内容以及如果必须的话如何重现测试。 (当然,您可能需要多种可预测的方法来确保防止文件中任何位置的损坏)

答案 5 :(得分:0)

同意Hex编辑器选项,因为这将允许您在文件中引入非文本值,例如nulls(0x00)等。

答案 6 :(得分:0)

如果您正在尝试模拟中断的写入,则可能只想截断表示序列化数据的字符串。如果您使用单元测试,这将特别容易,但使用记事本仍然非常可行。

当然,这只是一种不良数据,但值得注意的是,以任何方式格式错误的XML本质上不再是XML,大多数解析器会在语法错误的第一个迹象时拒绝它