[英]How to test a stack of n elements?
這似乎是一個愚蠢的問題,但我真的很想您的評論,並希望驗證我的測試人員的想法。
I can think of following test cases:
1) Pop element from empty stack should return error
2) Push n+1 elements in stack should return error during insertion of n+1th element
3) validate empty,full and top functions of stack.
4) if stack is used in multithreaded environment , make sure it is synchronized.
5) validate stack functionality:
push element (x)
pop element: it should return x
評論?
如果在面試中提出這個問題,可能的答案是什么? 我的答案足夠有效嗎?
我認為您已經涵蓋了所有內容,除了可能檢查3)之前推送的n
元素是您期望的方式。 這將捕獲錯誤的邊界條件檢查,即僅在寫入新元素之后檢查堆棧是否已滿。
另外,我將對您的測試用例進行不同的分組,並對每個用例的top,pop,push,empty,full測試:
*不是必需的,但可能是一個小案例。
在我看來很好。 只需確保在驗證功能時,確保以正確的順序返回多個項目,每次彈出並推動后top即可正常工作,並且在彈出最后一個元素后可正確報告為空。
我還將數字101推到100 + n,然后將它們全部彈出以確保它們以相反的順序出現(將捕獲排序問題,例如“有時pop將獲得第二個元素,而不是第一個元素”)。
以下序列應徹底測試除多線程需求以外的所有需求:
我將增強(5)的內容:推入N個不同的元素,彈出N次,並確保以相反的順序檢索相同的元素
檢查此單詞是否包含排序列表,反向排序列表和未排序列表中的元素也可能是明智的選擇。
您是否想對此感到神經過敏? 確認數據結構的性能總是很有趣的。 堆棧應具有恆定的性能。 因此,對於[0,n-1)中的每個k,您可以推入k個元素,然后將第(k + 1)個元素推入並彈出1e8次,並確保時間可比。 我可以想象幾種腦癱的實現方式,其中元素n-1的推入和彈出要比元素0花費n倍的時間。
如果除了push和pop之外還有其他方法(例如, length和top ),也請進行測試。
對於頂部,測試:
對於長度,請測試:
多線程:最好編寫一個測試,其中至少3個線程同時錘擊數據結構。 並確保在多處理器機器上運行它,這樣您才能獲得真正的並發,而不僅僅是時間分割。
並且不要忘記以下情況:
if( !stack.Empty )
{
// oops, another thread emptied the stack and now this call will throw an error:
stack.Pop();
}
好的,來自評論
堆棧測試可以分為
Functionality testing
Performance testing
Security testing: if data pushed onto stack are strings , then we may need to check for buffer overflows
如果您正在談論編寫測試用例以弄清堆棧是否是示例性的,那么就是這樣
public class LinkStackTest {
protected StackInterface<String> stack;
protected int size;
@Before public void setUp() {
stack = new LinkStack<String>();
}
@Test public void empty() {
assertTrue(stack.isEmpty());
assertEquals(0, stack.size());
}
我認為還有其他事情應該是最簡單的事情。 Stack是一種LIFO數據結構,因此,如果您使用給定的序列“ a,b,c,d ....... w”填充(隨后推動)給定的堆棧,則應該獲得相反的順序(w ,....,d,c,b,a)彈出堆棧中的所有元素。 有人應該檢查堆棧的main屬性是否正確。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.