2017-03-21 44 views
0

我正在爲我的類AttachmentProcessor編寫單元測試。 我的目標是測試所有方法和模擬例如IList FileList。Mocking System.Collections.Generic.IList Moq

public class AttachmentsProcessor 
    { 
     public IList<IFileInfo> FileList { get; set; } 

    public AttachmentsProcessor(IList<IFileInfo> FileList) 
    { 
     ... 
    } 

    public void RemoveAttachment(int index) 
    { 
    ... 
    } 

    public long GetTotalFilesSize() 
    { 
    ... 
    } 

    public void GetFilesFromDialog(IOpenFileDialog2 openFileDialog1) 
    { 
    ... 
    } 
} 

接口:

public interface IFileProcessor 
{ 
    IList<IFileInfo> FileList { get; set; } 

    void RemoveAttachment(int index); 

    long GetTotalFilesSize(); 

    void GetFilesFromDialog(IOpenFileDialog2 openFileDialog1); 
} 
+3

爲什麼你在第一個單元測試?你只是爲易用方法包裝了一個列表,你甚至不需要這個方法。其次,AttachmentsInfo可能是一個IFileInfo,但反之亦然,所以如果你想按照它的方式行事,那麼你的初始調用必須是附件處理器但如果你打算這樣做,你應該使用更適合於處理協方差和逆變的結構 –

+0

快速問題 - 使用'AttachmentProcessor'而不是簡單的'List '有什麼好處? –

+0

@SergeyBerezovskiy我有像 GetSizeOfAllAttachments,GetFilesFromDialog或GetFilesFromDragandDrop Event等方法 – Ngine

回答

0

我已經解決了我的問題。我的問題是,我不知道如何爲我的類附件處理器:IFileProcessor和列表做模擬。 我結束了這個解決方案,它的工作!感謝所有回覆。

 var mockFileProcessor = new Mock<IFileProcessor>(); //here is how I mocked my AttachmentProcessor 
     var mockAttachmentInfo = new Mock<IFileInfo>(); ///here is how I mocked my AttachmentInfo 
     mockAttachmentInfo.Setup(m => m.Length).Returns(() => 200); 
     mockFileProcessor.Setup(m => m.FileList).Returns(() => new List<IFileInfo> 
     { 
     mockAttachmentInfo.Object, 
     mockAttachmentInfo.Object, 
     mockAttachmentInfo.Object, 
     mockAttachmentInfo.Object, 
     mockAttachmentInfo.Object 
     }); /// and this is the part where I mocked my IList<AttachmentInfo> 

我結束了這個解決方案,它的工作!感謝所有回覆