C# 单元测试模型视图演示器的问题

C# 单元测试模型视图演示器的问题,c#,asp.net,unit-testing,tdd,mvp,C#,Asp.net,Unit Testing,Tdd,Mvp,我正在用MVP模式在ASP.NET web表单中创建一个应用程序。我在使用TDD时遇到了一些问题。我已经创建了两个测试,其中一个运行良好,但当执行第二个测试时,它会抛出一个错误 下面是我的观点 public interface IAddUpdateView : IView { string Type { get; set; } string PageTitle { set; } string Details { get; set; } bool Activ

我正在用MVP模式在ASP.NET web表单中创建一个应用程序。我在使用TDD时遇到了一些问题。我已经创建了两个测试,其中一个运行良好,但当执行第二个测试时,它会抛出一个错误

下面是我的观点

public interface IAddUpdateView : IView
{
     string Type { get; set; }
     string PageTitle { set; }
     string Details { get; set; }
     bool Active { get; set; }
}
演讲者

// BasePresenter is an abstract class contains abstract method with name Initialize()
public class MyPresenter: BasePresenter<IAddUpdateView >
{
     private readonly IDatabaseLayer _databaselayer;
     public MyPresenter(IAddUpdateView view, IDatabaseLayer databaseLayer) : base(view)
     {
         _databaselayer = databaseLayer;
     }
     public override void Initialize()
     {  }

     public void Initialize(string str)
     {
          string[] str1=Misc.DecryptURL(str);
          View.Type = str1[0].ToString();                   // ERROR LINE
          if (View.Type.ToLower().Trim() == "add")
          {
              View.PageTitle = "Add New Task";                
          }
          else if (View.Type.ToLower().Trim() == "edit")
          {
          }
      }  
 }
//测试1

测试2

//运行此测试方法时,它具有Type=“edit”,但在我的 演示者查看。类型(请参阅行错误),即使我 分配值

[测试]
加载对象时公共无效(用于编辑视图面板加载对象)
{
//安排
_view.Stub(x=>x.TaskDetails).PropertyBehavior();
//表演
Task o=newtask(){TaskId=6,Task_NAME=“Task 6”};
_初始化(GetURLWithEditValue(o));
//断言
Assert.AreEqual(o.TASK\u NAME、\u view.TaskDetails);
}  
私有静态IDatabaseLayer MockDataLayer()
{
IDatabaseLayer obj=MockRepository.GenerateMock();
MockTaskDataLayer a=新的MockTaskDataLayer();
obj.Stub(x=>x.GetList());
返回obj;
}
}
有人能告诉我为什么测试1会通过,测试2在视图中赋值后何时执行。Type(参见MyPresenter类中的LINE ERROR)仍然为null


谢谢,

我没有使用Rhino Mock的经验,但也许在
测试2中,您还应该添加
\u view.Stub(x=>x.Type).PropertyBehavior()@Arkadiusz:谢谢!!虽然我以前自己解决了这个问题,但事实上这就是解决方案。我没有使用Rhino Mock的经验,但在
测试2中,您可能还应该添加
_view.Stub(x=>x.Type).PropertyBehavior()@Arkadiusz:谢谢!!虽然我以前自己解决了,但事实上这就是解决办法。
[TestFixture]
public class MyPresenterTest
{
   private IAddUpdateView _view;
   private MyPresernter _controller;

   [SetUp]
   public void SetUp()
   {
      _view = MockRepository.GenerateMock<IAddUpdateView >();
      _controller = new MyPresernter (_view, MockDataLayer());
   }

   [TearDown]
   public void TearDown() { _controller = null; _view = null; }
   [Test] 
   public void When_Loading_for_Add_View_Panel_Return_Type_Add()
   {
       // Arrange
       _view.Stub(x => x.Type).PropertyBehavior();    

       //Act
       _controller.Initialize(GetURLWithAddValue());  
       // GetURLWithAddValue: This method get the URL with querystring contains value as "add"   

       //Assert
       Assert.AreEqual("add",_view.Type);

   }
   [Test]
   public void When_Loading_for_Edit_View_Panel_Load_Correct_Object()
   {
        // Arrange
        _view.Stub(x =>x.TaskDetails).PropertyBehavior();            

        //Act
        Task o=new Task(){ TaskId=6, TASK_NAME="Task 6"};

        _controller.Initialize(GetURLWithEditValue(o));    

       //Assert
       Assert.AreEqual(o.TASK_NAME, _view.TaskDetails);

   }  

   private static IDatabaseLayer MockDataLayer()
   {
      IDatabaseLayer obj = MockRepository.GenerateMock<IDatabaseLayer>();
      MockTaskDataLayer a = new MockTaskDataLayer();
      obj.Stub(x => x.GetList());          
      return obj;
   }
  }