2017-03-21 5 views
0

Ich struggeling mit Schreibeinheit Tests für meine Klasse AttachmentProcessor. Mein Ziel ist es, alle Methoden zu testen und zum Beispiel IList FileList nachzuahmen.Mocking System.Collections.Generic.IList mit 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) 
    { 
    ... 
    } 
} 

Schnittstelle:

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

    void RemoveAttachment(int index); 

    long GetTotalFilesSize(); 

    void GetFilesFromDialog(IOpenFileDialog2 openFileDialog1); 
} 
+3

Warum testen Sie das Gerät zuerst? Sie wickeln nur eine Liste für Convience-Methoden, Sie brauchen nicht einmal diese Methode an erster Stelle, Zweitens AttachmentsInfo kann eine IFileInfo sein, aber nicht umgekehrt. Wenn Sie also so handeln wollen, muss Ihr erster Aufruf sein AttachmentsProcessor aber wenn Sie das tun, sollten Sie eine Struktur verwenden, die besser geeignet ist, Kovarianz und Contravarianz zu behandeln –

+0

Schnelle Frage - was ist der Vorteil der Verwendung von 'AttachmentProcessor' gegenüber der Verwendung von' List '? –

+0

@SergeyBerezovskiy Ich habe Methoden wie GetSizeOfAllAttachments, GetFilesFromDialog oder GetFilesFromDragandDrop Event usw. – Ngine

Antwort

0

Ich habe mein Problem gelöst. Mein Problem war, dass ich nicht wusste, wie man Mocks für meine Class AttachmentProcessor: IFileProcessor und List. Ich endete mit dieser Lösung und es hat funktioniert! Danke für alle Antworten.

 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> 

Ich endete mit dieser Lösung und es hat funktioniert! Danke für alle Antworten