2015-12-06 75 views
0

我目前正在從基於堆棧的虛擬機上加載來自文本文件的命令,並且需要測試類增量和減量操作。 我對單元測試相當陌生,但是我已經在幾個例子中弄清楚了語法,但現在我變得有點卡住了!基於單元測試堆棧的虛擬機c#

當我嘗試運行測試時,我得到一個空值異常,所以我想我的下一個問題是我最好使用Moq或Fakes來傳遞一個值來測試它是否通過了預期的結果?

我有看假貨組裝這是我想出了,但我不知道我怎麼會傳遞一個System.Collections中

這之後我已經變成卡住,任何幫助/建設性幫助會很好。

EDIT-在調用此類之前,整數值已被推入堆棧。

+0

不知道如果我只是錯過了一些東西,但是你如何期望從堆棧中彈出某些東西,而不是先將東西推到它上面? –

+0

在Pop之後有一個Push語句,它的工作正常,聲明已經到位,這個變量在我想要測試的類中被調用。 int op1 =(int)VirtualMachine.Stack.Pop(); VirtualMachine.Stack.Push(op1--); –

+0

空值異常在哪裏發生?將幫助我們更快地追蹤問題。 –

回答

0

聽起來像你可能會有點摩擦,因爲這個問題已經被模擬得有點奇怪。對於我的錢,我想通過重新安排你的問題avoid the difficulty of mocking。例如,如果您將堆棧傳遞給操作本身,則會得到更自然的測試;

var stack = new Stack(); 
var op = new Decr(); 
stack.push(0); 
op.Execute(stack); 
Assert.AreEqual(-1, stack.Peek()); 

您將在Decr類中避免不必要的狀態。這是依賴反轉原理的一個例子,依賴對象被傳遞到一個類中,而不是由它創建。

+0

我想出了一個小調整給你回答,但它仍然傳遞一個空對象異常:var stack = new SVM.VirtualMachine.Fakes.StubIVirtualMachine(); var op = stack.StackGet(); op.Pop(); op.Push(1); Assert.AreEqual(-1,op.Peek()); –

+0

再一次,我會在這裏避免存根 - 你能否通過一個普通的堆棧?不需要接口,存根等。另外,什麼行會導致這個空的ref異常?你可以附加一個調試器,並找出它究竟發生了什麼? –

+0

據我所知,你不能,它說第13行,但那是方法的開始。 –