簡體   English   中英

存儲具體類中的屬性,但不在單元測試的接口上

[英]Stub a property which is in the concrete class but not on the interface for unit testing

我有一個類,其中包含更多信息,然后是我的界面。 它有一個我沒有在我的界面中公開的屬性。

 public interface IViewResolver
{
    object GetViewFor(string viewName);

}

我現在想要基於該接口實現MefViewResolver。

public class ViewResolver : IViewResolver
{


    [ImportMany]
    public IEnumerable<Lazy<IView,IViewMetaData>> Views { get; set; }



    public object GetViewFor(string viewName)
    {
        var view = Views.Where(x => x.Metadata.Name == viewName).FirstOrDefault();

        return view == null ? null : view.Value;
    }

}

我的SUT獲取一個加載了mefViewResolver的構造函數注入的IResolver。 在我的單元測試中,我想從外部預先設置我的Views屬性,而不使用mef或在我的界面中特定於mef。 基本上我想用期望值設置視圖,看看我使用IViewResolver的viewmodel是否返回預設視圖......如果我的界面上不存在views屬性,我怎樣才能存根...

如果我在錯誤的道路上...任何更正都會很有幫助...

感謝:D。

如果你想測試只知道IViewResolver接口的ViewModel(而不是Resolver),你應該沒有任何問題:ViewModel可以訪問的唯一方法(根據提供的代碼)是GetViewFor 您需要做的就是在給定View名稱的情況下為每個測試用例返回相應的View。 在RhinoMocks中它應該是這樣的:

// Arrange the test objects
var viewResolverMock = MockRepository.GenerateMock<IViewResolver>();
viewResolverMock.Stub(x => x. GetViewFor(thisTestViewName).Return(thisTestView);
var myViewModel = new MyViewModel(viewResolverMock);

// Do the actual operation on your tested object (the view model)
var actualResult = myViewModel.DoSomethingWithTheView();

// Assert 
AssertAreEqual(expectedResult, actualResult);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM