如何使用NUnit模拟属性?

如何使用NUnit模拟属性?


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

其他答案也欢迎。

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

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

Interface IView { List Names {get; set;} } public class Presenter { public List GetNames(IView view) { return view.Names; } } 

针对属性的NUnit Mock解决方案

 using NUnit.Mocks; 

在NUnit中,可以使用模拟库的Expect *(..)方法,使用get_PropertyName模拟get访问器和set_PropertyName模拟set访问器来模拟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_Namesset_Names


等等。

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

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