C# 思路分享 构造可进行单元测试的波形数据

Posted HelloLLLLL

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 思路分享 构造可进行单元测试的波形数据相关的知识,希望对你有一定的参考价值。

需要单元测试自己写的识别特殊波峰的算法,所以必须构造波形数据。
一开始是自己在控件上手绘波形,虽然这种方便,但是能绘制的点太少,每次手画显得麻烦。
过后,又采用随机数构造波峰,这种虽说能构造很多点,产生很多随机的波峰波谷,但是对于特殊的波峰无法进行预期。
最后我就想到这种方法,先构造出一定范围的样例峰谷数据,然后可以对这些数据进行一个随机增幅,
值限定在一定范围,最后在构造需要识别的特殊波峰,并不对这个特殊波峰进行增幅,
这样自己就构造出了预期的值,单测的时候就能判断了。
 
具体的办法,我是把样例数据分成 上升的数据段3组,每组10个点,下降的数据段3组,每组10个点,
可以在每个升降组构造一些小型的峰谷,这样可以在普通波峰上形成小型的波峰。
一对升降就是一个波峰,也可以先降后升这种组合,还有预期数据(特殊波峰) 一组, 5个点,其中有个特殊值是预期波峰。
构造好样例数据之后,再开一个循环,循环次数根据对数据点的个数要求自己订
,每一次循环就把一对升降组加入集合,这个升降组可以是随机抽取,自己也可以多定义几组升降组,增加波形的随机性。
这样经循环一次,就形成一个波峰,这样也能安排在特定的位置出现特殊波峰。
然后定义一个增幅值*(1到2的随机值的平方),因为平方函数的曲线变化更大,相对与立方来说,变化也不是很大,
如果是立方,波形振幅都很大了。我们只对一般的升降组进行增幅,每次循环只进行一次增幅值的改变,这样既能保持波峰的形态,也能得到更加像随机产生的波形。
 
当然也可以进行 升降数据的混合组合,产生更加随机的效果。
最后 应该用gdi+在控件上把数据画出来, DrawLine 方法可以满足要求。
 
最后再做一个导出数据点集合的功能,直接newtowsoft保存txt文件,这样最后就能再单元测试中使用数据了。

这张图是没加增幅的情况,所以不够随机。 

使用内存磁盘进行 I/O 单元测试

【中文标题】使用内存磁盘进行 I/O 单元测试【英文标题】:Using Memory Disk for I/O unit tests 【发布时间】:2012-03-14 08:33:11 【问题描述】:

我在 C# 中有以下设置 - 我有一个组件,它在构造函数中获取文件夹路径,然后,一些巨大的数据由它处理并以多个文件的形式写入磁盘(数量级约为 1Gb ,非常 IO 密集型)。在检索时,数据被读入(也是 IO 密集型),我的单元测试(nunit 和 MOQ,实际上是组件测试)将它们与原始数据进行比较。问题 - 单元测试需要几分钟才能完成,这很烦人。我想,有没有办法在测试夹具设置中创建 RAMDrive 或 RAMFolder,并在拆卸时将其删除。我不能使用内存文件或内存流,因为在组件之外没有人应该知道确切使用了哪些文件。

有什么想法吗?

最好的问候, 彼得

【问题讨论】:

【参考方案1】:
    获取 SSD 减少单元测试 在单独测试的子组件中抽象存储访问...然后使用内存中的数组模拟文件。

三种可行的方法。我会尝试使用 3 - 并且仍然购买 SSD。 SSD 非常适合大量的小型 IO 内容,猜猜编译是什么(甚至 C# - 大量的源文件)。

【讨论】:

SSD 会很好,但它需要不是一个,而是每个员工 1 个(TDD,在交付策略之前运行所有测试)以及多个构建服务器 - 那不是(还;))我的决定水平。减少单元测试在这里也不成问题。添加一个子组件级别 - 也许,我需要考虑这一点,但它也需要对不止一个组件进行介绍。 好吧,我现在将所有磁盘替换为 120gb ssd 供开发人员使用。另外 - 我的构建服务器会检查签入(在将更改合并到主干之前在服务器上构建和测试)。 好吧,如果你能说服公司将所有 5000 名开发人员全部切换到 SSD,或者至少我们的大约 250 人的部门 - 我当然会玩;) 这很容易 - 认真。我不知道你付给开发人员多少钱,但在我的世界(和水平)中,120gb SSD 的成本相当于大约一个小时的发票时间。即使在印度或中国,5000 名开发人员的基础设施成本完全使 SSD 的成本相形见绌。【参考方案2】:

为什么你需要在测试后拆掉它?为什么不在ClassCleanup 中进行单元测试后清空所有文件?

作为 RAMdisk 软件,您可能需要通过http://www.superspeed.com/desktop/ramdisk.php查看 RAMDisk 11。

您当然也可以模拟文件的实际写入,不是吗?

【讨论】:

我很快调查了 RAMDisk,但它需要安装。对我来说,获得一个不需要安装的解决方案会更好,因为它需要安装在多个构建服务器(我无法真正访问)和所有员工机器上。可能需要在这里搜索模拟选项...【参考方案3】:

我会尝试让业务对象带有两个 api,一个带有文件名(用于现有代码),一个带有流。

文件 api 只是一个将调用转换为处理完成的 streamapi 的薄层。

单元测试可以使用stream-api(即内存流),而wole系统通过fileapi处理文件流

【讨论】:

以上是关于C# 思路分享 构造可进行单元测试的波形数据的主要内容,如果未能解决你的问题,请参考以下文章

单元测试基本框架和8个测试方面

使用 C# 对 SQL Server OLAP 多维数据集进行单元测试

使用内存磁盘进行 I/O 单元测试

嵌入式代码单元/集成测试工具VectorCAST

单元测试2

安装Visual studio 2013并进行单元测试