C# 单元测试模型视图演示器的问题
我正在用MVP模式在ASP.NET web表单中创建一个应用程序。我在使用TDD时遇到了一些问题。我已经创建了两个测试,其中一个运行良好,但当执行第二个测试时,它会抛出一个错误 下面是我的观点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
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;
}
}