Ste*_*ers 0 c# unit-testing chain-of-responsibility
我有一个具有7个相关字段的持久对象.
这些字段可以包含此处列出的值的数量:
Field # of Possible Values
1 5
2 20
3 2
4 2
5 19
6 2
7 8
Run Code Online (Sandbox Code Playgroud)
这是121600个独特对象的潜力.
测试中的代码是一些过滤器,它们根据字段的值捕获一定数量的这些对象,然后将它们放入一个bin以供另一个系统使用.bin存放是微不足道的,经过测试,并且工作正常...只是过滤不起作用.似乎有许多边缘情况没有被覆盖,并且许多对象在根本不应被选择时被放置在容器中,反之亦然.
总而言之,有9个过滤器在一系列责任中运行,每个过滤器将物体放入箱子直到箱子装满,此时链条退出.链中的最后一个过滤器只是一个"过滤器",它向管理员发送一封电子邮件,指出对象运行不足(即,如果链到达此过滤器,则bin未满,并且需要看看).
所以我的问题是:我如何测试这些过滤器?我可以使用一系列for语句创建每个唯一类型的对象之一:
public void FixtureSetup()
{
for(each possible value for field 1)
{
for(each possible value for field 2)
{
// ... continue with 5 more for statements
// Create Object with each value
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是尝试手动确定哪些对象应该从生成的集合(甚至是过滤对象的集合)中正确过滤将是非常困难的(如果可能的话,我会在我第一次编写过滤器时轻松完成它).
我知道要求是错误的,因为他们说的是:
filter 1 gets
- field 1: values 1/2/3
- field 2: values 2/3/4
- etc.
Run Code Online (Sandbox Code Playgroud)
但结果显示了很多边缘情况,每次我改变它以包括那个特定情况,其他东西中断(我没有回归测试以确保它没有)并且很难找到链中的位置特定问题发生了.
编辑>我试图单独测试过滤器,但假设如下:
过滤器1抓取121600个可能对象中的500个(根据过滤器的标准).我发现,对100个(完全猜测)那些被抓住的物体,不应该 - 并且出于各种原因.为了知道,我必须与另一个系统的用户一起检查每个过滤器,以了解每个过滤器的结果集是否正确.与此相反也在我的脑海中徘徊......那应该抓住的所有物体怎么样,但事实并非如此.
我开始认为这可能是需求收集中的一个问题,而不是测试.
听起来你没有明确的规格.如果您没有明确的规范,那么您怎么可能知道代码是否按照规范运行?
退后一步.首先写一个句子规范:
FrobFilter组件采用一系列Frobs并将每一个放在正确的FrobBin中,直到一个bin满.
好的,现在你已经有了规格.它还不是可测试或可实现的规范.为什么不?两个原因.
原因一:没有指定在Frob序列用完之前没有FrobBin填充的结果.
原因二:未指定"正确".
现在写一个解决每个问题的一句话规范.
如果序列在某个bin已满之前结束,则会通知管理员.
对于Frob这样Bladgh是Gnusto的正确的bin总是FrotzBin.
好的,现在你还有两个问题.如何通知管理员?如果Frob的Blargh不是Gnusto会怎么样?
继续分解,一次一句,直到你有一个完整和准确的规格.然后你会发现你的规范,实现的程序和测试用例都看起来非常像彼此.这是一个非常棒的情况.
| 归档时间: |
|
| 查看次数: |
247 次 |
| 最近记录: |