使用Rhino Mock进行测试会抛出一个错误

本文关键字:错误 一个 Mock Rhino 测试 使用 | 更新日期: 2023-09-27 18:05:15

你好,我是TDD的初学者,使用RhinoMocks在应用程序中创建moqs。我试图实现MVP模式。

这是我的界面

public interface IView
{
   List<Bundle> DisplayList { get; set; }  
}

和我的Presenter类

public class Presenter
{
    private IView View;
    public Presenter(IView view)
    {
        View = view;            
    }
    public void Bind()
    { 
        // I am creating a dummy list in MockDataLayer and SelectAll Method returns the whole list
        IDataLayer dsl=new MockDataLayer();
        View.DisplayList = dsl.SelectAll();
    } 
}
下面是我的测试类
public class PresenterTest 
{
    private IView _view;
    private Presenter _controller;
    [Test]
    public void View_Display_List()
    {
        //Arrange
        _view = MockRepository.GenerateMock<IView>();
        List<Bundle> objTest = new List<Bundle>();            
        _controller = new Presenter(_view);
        _view.Expect(v => v.DisplayList).Return(objTest);
        //Act
        _controller.Bind();
        //Assert
        _view.VerifyAllExpectations();
    }
}

当我执行测试时,我收到这个错误:

depaulOAR.PatchBundleTesting.Test.BundlePresenterTest.BundleView_Display_Bundle_List:
Rhino.Mocks.Exceptions.ExpectationViolationException : IBundleView.get_DisplayList(); Expected #1, Actual #0.

任何帮助都将是非常感激的。

编辑:注意我从这个链接得到帮助。几乎所有的东西都是除测试部分外工作。当我在Web表单上实现它时,我的浏览器显示列表。但当我测试视图时,它抛出一个错误http://www.bradoncode.com/blog/2012/04/mvp-design-pattern-survival-kit.html

感谢"老狐狸"的帮助。但现在我的问题是它抛出了一个不同的错误

使用Rhino Mock进行测试会抛出一个错误

初始化IView.DisplayList的getter期望:

_view.Expect(v => v.DisplayList).Return(objTest);

上面这行是对getter的一个期望。

在测试的方法中,您使用IView.DisplayList的setter:

View.DisplayList = dsl.SelectAll();

我认为您要测试的行为是:"要显示的项目是在视图中设置的"。如果是这样,您的测试应该类似于:

[Test]
public void View_Display_List()
{
   //Arrange
   _view = MockRepository.GenerateMock<IView>();
   List<Bundle> objTest = new List<Bundle>();
   controller = new Presenter(_view);
   //Act
   _controller.Bind();
   //Assert
   CollectionAssert.AreEquivalent(The same items MockDataLayerl.SelectAll() returns 
                                  ,_view.DisplayList );
}
编辑:

验证分配给View.DisplayList的东西比上面的例子更容易。您必须验证View.DisplayList不是null:

[Test]
public void View_Display_List()
{
   //Arrange
   _view = MockRepository.GenerateMock<IView>();
   _view.Stub(x => x.Display List).Property Behavior();
   List<Bundle> objTest = new List<Bundle>();
   controller = new Presenter(_view);
   //Act
   _controller.Bind();
   //Assert
   Assert.IsNotNull(_view.DisplayList );
} 
相关文章: