我有一個擁有7個相關字段的持久對象。你將如何測試過濾複雜對象的東西
字段可以容納這裏列出值的數量:
Field # of Possible Values
1 5
2 20
3 2
4 2
5 19
6 2
7 8
這是121600個唯一對象的可能性。
被測試的代碼是一些過濾器,它們根據字段的值獲取一定數量的這些對象,然後將它們放入一個容器中供其他系統使用。存放箱子是微不足道的,經過測試並正常工作......只是過濾不起作用。似乎有很多邊緣案例沒有被覆蓋,並且許多對象被放置在一個容器中,而根本不應該被選中,反之亦然。
總而言之,有9個過濾器工作在一個責任鏈中,每個過濾器都將物體放入垃圾箱,直到垃圾箱滿了爲止,此時鏈條退出。鏈中的最後一個過濾器只是一個'過濾器',它向管理員發送一封電子郵件,指出這些對象運行的很低(例如,如果鏈條到達此過濾器,則垃圾箱未滿,需要被看着)。
所以我的問題是這樣的:我如何測試這些過濾器?我可以用一系列的語句創建每個獨特類型的對象之一:
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
}
}
}
但是,試圖手動找出哪些對象應該從結果集合(過濾的對象,即使集合)進行適當過濾會非常困難(如果可能的話,當我第一次寫過濾器時,我會很容易地做到這一點)。
我知道,要求有過錯,因爲他們這樣說:
filter 1 gets
- field 1: values 1/2/3
- field 2: values 2/3/4
- etc.
但結果都出現瞭如此多的優勢情況下,每個I改變它的時間來包括特定的情況下,一些否則會中斷(並且我沒有迴歸測試來確保它不會),並且很難找出鏈中發生特定問題的位置。
編輯>我試圖單獨地測試該過濾器,但是假定:
濾波器1抓鬥的121600個可能的對象(根據過濾器的條件)的500。我發現,那些被抓的對象說100(完全猜測)不應該 - 並且因爲各種原因。爲了知道,我必須通過其他系統的用戶來了解每個過濾器的結果集是否正確。與此相反的情況也在我腦海中徘徊... ...應該抓住什麼東西,但不是。
我開始認爲這可能是需求收集問題,而不是測試。
這些過濾器很簡單,但日復一日,它們的複雜性不斷增加,以至於管理複雜性的事情正在使我受到傷害。 – 2009-07-23 18:07:30
所有更多的理由讓過濾器單獨測試,人們可能會爭辯。祝你好運! :) – 2009-07-23 18:46:24