单元测试模型的问题查看演示者

时间:2015-08-11 14:45:58

标签: 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 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")
          {
          }
      }  
 }

现在我正在创建单元测试模拟Presenter类,以使用Rhino模拟测试依赖项。 这是我的测试类,只有两种测试方法。这些测试方法在加载View时调用它调用适当的页面类型。 当调用 ADD 类型时,它会将View.Type作为“添加”,并且当调用编辑类型时,它会验证所加载的特定对象。< / p>

[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 1

   [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 2

     

//运行此测试方法时,它具有 Type =“edit”,但在我的   演示者 View.Type (参见LINE ERROR),即使我,我的类型也是null   分配了值。

   [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;
   }
  }

有人可以指导我为什么测试1通过,当执行测试2时,在View.Type中指定一个值后(参见MyPresenter类中的LINE ERROR),它仍然是空的吗?

谢谢,

0 个答案:

没有答案