如何使用NUnit模拟属性?

Joh*_*n K 7 .net c# nunit mocking

如何使用NUnit模拟属性?


注意:我发现这个外围模拟答案非常有用,并将其作为一个独特的问答条目重新用于其他人,以供其他人查找.

其他答案也欢迎.

NUnit-Discuss注意: NUnit Mocks是在周末创建的玩具模拟实现[...]我开始认为这是一个错误,因为你远离第一个依赖它的人.
- http://groups.google.com/group/nunit-discuss/msg/55f5e59094e536dc(NUnit
Mocks上的Charlie Pool)

Joh*_*n K 9

要在以下示例中模拟Names属性...

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

public class Presenter {    
    public List<string> GetNames(IView view)    {
       return view.Names;    
    } 
}
Run Code Online (Sandbox Code Playgroud)

针对房产的NUnit Mock解决方案

using NUnit.Mocks;
Run Code Online (Sandbox Code Playgroud)

在NUnit的一个属性名可以与嘲笑get_PropertyName嘲笑get访问和set_PropertyName嘲笑set访问,使用模拟库的期待*(..)像这样的方法:

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));
Run Code Online (Sandbox Code Playgroud)

因此,在顶部的特定代码示例中,.Names属性被模拟get_Namesset_Names.


等等.

考虑到NUnit似乎只为目标方法提供了模拟方法,这篇博文提供了额外的见解:

我开始考虑它并意识到Property getters和setter只是被视为特别命名的方法