基于单元测试堆栈的虚拟机c#

基于单元测试堆栈的虚拟机c#,c#,unit-testing,moq,microsoft-fakes,C#,Unit Testing,Moq,Microsoft Fakes,我目前正在一个基于堆栈的虚拟机上工作,该虚拟机从文本文件加载命令,我需要测试类的递增和递减操作。 我对单元测试相当陌生,但我已经用了几个例子来掌握语法,但现在我有点卡住了 当我尝试运行测试时,我得到一个空值异常,所以我想我的下一个问题是,我最好使用Moq或Fakes来传递一个值,以测试它是否通过了预期的结果 我已经看过了假货组装,这是我想到的,但我不确定如何通过系统。收藏 在这之后,我陷入困境,任何帮助/建设性的帮助都将是极好的 编辑-在调用此类之前,已将整数值推送到堆栈中。听起来您可能会遇到一

我目前正在一个基于堆栈的虚拟机上工作,该虚拟机从文本文件加载命令,我需要测试类的递增和递减操作。 我对单元测试相当陌生,但我已经用了几个例子来掌握语法,但现在我有点卡住了

当我尝试运行测试时,我得到一个空值异常,所以我想我的下一个问题是,我最好使用Moq或Fakes来传递一个值,以测试它是否通过了预期的结果

我已经看过了假货组装,这是我想到的,但我不确定如何通过系统。收藏

在这之后,我陷入困境,任何帮助/建设性的帮助都将是极好的


编辑-在调用此类之前,已将整数值推送到堆栈中。

听起来您可能会遇到一些摩擦,因为问题的建模有点奇怪。为了我的钱,我愿意重新安排你的问题。例如,如果您将堆栈传递到操作本身,您将得到一个更自然的测试

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

您将避免在
Decr
类上出现不必要的状态。这是依赖项反转原则的一个示例,依赖项对象被传递到类中,而不是由类创建。

不确定我是否只是缺少了一些东西,但是您希望如何在不首先将某些东西推到堆栈上的情况下从堆栈中弹出一些东西?在弹出之后有一个Push语句,它在适当的语句中工作良好,变量的调用与我尝试测试的类中的调用类似。int op1=(int)VirtualMachine.Stack.Pop();虚拟机.Stack.Push(op1--);空值异常发生在哪里?将帮助我们更快地跟踪问题。抱歉,当我在测试资源管理器中运行测试时,我得到以下结果:Result StackTrace:at UnitTestSVM.UnitTest1.DecrTest()在UnitTestSVM\UnitTest1.cs中:第17行结果消息:测试方法UnitTestSVM.UnitTest1.DecrTest引发异常:System.NullReferenceException:Object reference未设置为对象的实例。我对您的答案进行了一些调整,但它仍然传递空对象异常:var stack=newSVM.VirtualMachine.Fakes.StubIVirtualMachine();var op=stack.StackGet();op.Pop();op.Push(1);aresequal(-1,op.Peek());再说一次,我要避免在这里使用存根--您不能传递正常堆栈吗?不需要接口、存根等。还有,是哪一行导致这个空引用异常?你能附加一个调试器并找出它发生的确切位置吗?据我所知,你不能,它说的是第13行,但这是该方法的开始。很抱歉,在这个语句var stackVal=stack.StackGet()中发生空异常;是的,看到了吗?只需更新堆栈并将其传递进来就更容易了?