C# 如何使用NUnit模拟属性?

C# 如何使用NUnit模拟属性?,c#,.net,nunit,mocking,C#,.net,Nunit,Mocking,如何使用NUnit模拟属性 注意:我发现它非常有用,并将其重新定位为一个独特的问答条目,供其他人查找 其他答案也欢迎 NUnit讨论说明: NUnit Mocks是在一个周末制作的 作为一个玩具模拟的实现[…]我开始认为这是一个错误,因为你远远不够 从第一个人开始依赖它。 -- (NUnit Mocks上的Charlie Pool) 要模拟以下示例中的Names属性 Interface IView { List<string> Names {get; set;}

如何使用NUnit模拟属性


注意:我发现它非常有用,并将其重新定位为一个独特的问答条目,供其他人查找

其他答案也欢迎

NUnit讨论说明: NUnit Mocks是在一个周末制作的 作为一个玩具模拟的实现[…]我开始认为这是一个错误,因为你远远不够 从第一个人开始依赖它。
--
(NUnit Mocks上的Charlie Pool)

要模拟以下示例中的Names属性

Interface IView {    
    List<string> Names {get; set;} 
}

public class Presenter {    
    public List<string> GetNames(IView view)    {
       return view.Names;    
    } 
}
在NUnit中,可以使用模拟库的Expect*(…)方法,使用get\u PropertyName模拟获取访问器,使用set\u PropertyName模拟集访问器来模拟PropertyName,如下所示:

List names = new List {"Test", "Test1"};
DynamicMock mockView = new DynamicMock(typeof(IView));

mockView.ExpectAndReturn("get_Names", names);

IView view = (IView)mockView.MockInstance;
Assert.AreEqual(names, presenter.GetNames(view));
因此,在顶部的特定代码示例中,.Names属性被模拟为get\u Namesset\u Names


等 考虑到NUnit似乎只为目标方法提供模拟方法,因此提供了额外的见解:

我开始考虑,然后 认识到属性getter和 二传手只是被当作特殊的 隐藏的命名方法


我充实了John K的示例,因此它实际上是在.NET 2.0下编译的-请注意,无论您在哪里使用mock.Expect()或mock.ExpectAndReturn(),都应该始终使用mock.Verify()…愚蠢的短文本编辑器<代码>使用System.Collections.Generic;使用NUnit.Framework;使用NUnit.Mocks;命名空间StackExchange531412{public interface IView{List Names{get;set;}}}public class Presenter{public List GetNames(IView view){return view.Names;}}`[TestFixture]public class TestView{[Test]public void TestNames(){List Names=new List();Names.AddRange(新字符串[]{“Test”,“Test1”});DynamicMock mockView=new DynamicMock(typeof(IView));mockView.ExpectAndReturn(“获取_名称”,名称);//mockView.Expect(“设置_名称”,名称);IView view=(IView)mockView.MockInstance;Presenter Presenter=new Presenter();Assert.AreEqual(名称,Presenter.GetNames(视图));mockView.Verify();}}`答案中的链接给出了“无法访问此站点”。
List names = new List {"Test", "Test1"};
DynamicMock mockView = new DynamicMock(typeof(IView));

mockView.ExpectAndReturn("get_Names", names);

IView view = (IView)mockView.MockInstance;
Assert.AreEqual(names, presenter.GetNames(view));