[英]How to mock the property which returns the list object - In rhino mock
Interface IView
{
List<string> Names {get; set;}
}
public class Presenter
{
public List<string> GetNames(IView view)
{
return view.Names;
}
}
var mockView = MockRepository.GenerateMock<IView>();
var presenter = new Presenter();
var names = new List<string> {"Test", "Test1"};
mockView.Expect(v => v.Names).Return(names);
Assert.AreEqual(names, presenter.GetNames(mockView)) // Here presenter returns null which is incorrect behaviour in my case;
當我使用上面的代碼返回名稱的模擬列表時,它與expecatation不匹配然后返回null並失敗
謝謝你的幫助
編輯:我將視圖作為主持人的GetNames方法的參數傳遞。問題是,當我從mocked屬性返回列表對象時,它返回null。 但是,當我將屬性數據類型更改為string / int iepremitive類型時,將正確返回值
我沒有看到你的mockView附加到你的演示者的任何地方。 因此,從演示者的角度來看,視圖為空。 您可能需要執行以下操作:
presenter.View = view;
我剛用NUnit和RhinoMocks 3.5編寫了這個,以確保它有效。 這是我的兩個類文件。 測試通過了。
using System.Collections.Generic;
namespace Tests
{
public interface IView
{
List<string> Names { get; set; }
}
public class Presenter
{
public List<string> GetNames(IView view)
{
return view.Names;
}
}
}
using System.Collections.Generic;
using NUnit.Framework;
using Rhino.Mocks;
namespace Tests
{
[TestFixture]
public class TestFixture
{
[Test]
public void TestForStackOverflow()
{
var mockView = MockRepository.GenerateMock<IView>();
var presenter = new Presenter();
var names = new List<string> {"Test", "Test1"};
mockView.Expect(v => v.Names).Return(names);
Assert.AreEqual(names, presenter.GetNames(mockView));
}
}
}
我只能猜測你混淆代碼的方式有問題。
感謝您的幫助,經過調查我發現我在演示者中創建了一個新的列表對象,其中包含相同的視圖列表對象內容,因此它失敗了。 現在我使用屬性約束來匹配期望中的參數,它工作了!! 謝謝大家
我不熟悉Rhino Mocks,但我可以告訴你如何使用NUnit的內置模擬庫NUnit.Mocks:
列表名稱=新列表{“測試”,“測試1”};
DynamicMock mockView = new DynamicMock(typeof(IView));
mockView.ExpectAndReturn(“get_Names”,名字);
IView view =(IView)mockView.MockInstance;
Assert.AreEqual(names,presenter.GetNames(view));
有一件事你不應該忘記(我知道我做了,這讓我困惑): 指定你希望工作多少次 - 否則如果你的代碼不止一次使用該屬性,你會得到奇怪的結果,因為期望
mockView.Expect(v => v.Names).Return(names);
僅適用於單個呼叫。 所以你應該寫
mockView.Expect(v => v.Names).Return(names).Repeat.Any();
如果你的模擬屬性應該在每次被調用時返回相同的東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.