2017-05-08 59 views
1

我有兩個類和一個接口。我想在我的測試中使用模擬。我想設置我的ReadBooklets()方法。但我不知道我該怎麼做。如何使用模擬設置List <string> ReadBooklets方法?

class FileHandler : IHandler 
{ 
    public List<string> ReadBooklets() // A booklets.txt-ben található mérési azonosítókat beolvassa egy string listába 
    { 
     List<string> booklets = new List<string>(); 
     booklets = File.ReadAllLines("booklets.txt").ToList(); 
     return booklets; 
    } 
} 
public class XMLHandler 
{ 
    FileHandler fileHandler = new FileHandler(); 
    public IHandler handler; 
    public void RegisterHandler(IHandler handler) 
    { 
     this.handler = handler; 
    } 


    public void Creator() // Létrehozza a /bin/debug/booklets.txt-ben található mérési azonosítójú xml-eket 
    { 
     List<string> booklets = handler.ReadBooklets(); 
     List<XDocument> outxdocs = new List<XDocument>(); 
     XDocument foo; 
     Student foostudent; 
     for (int i = 0; i < booklets.Count; i++) 
     { 
      foostudent = new Student(booklets[i].Remove(9, 4)); 
      foo = new XDocument(
       new XElement("Diákok", 
       new XElement("Id", foostudent.Id), 
       new XElement("Pont", foostudent.Point))); 
      outxdocs.Add(foo); 
      outxdocs[i].Save(booklets[i]); 
     } 
    } 
} 

public interface IHandler 
{ 
    List<string> ReadBooklets(); 
} 

這是我的測試項目,在那裏我想設置我的handlerMock,但我不能。

[TestFixture] 
public class XMLHandlerTests 
{ 
    [Test] 
    public void XML_Should_Created_When_Called_Creator() 
    { 
     // Arrange 
     XMLHandler xmlHandler = new XMLHandler(); 
     Mock<IHandler> handlerMock = new Mock<IHandler>(); 
     handlerMock.Setup(x => x.ReadBooklets()).Returns(); 
     xmlHandler.RegisterHandler(handlerMock.Object); 
     FileInfo firstStudentId = new FileInfo("A111-T143.xml"); 
     FileInfo lastStudentId = new FileInfo("X973-B320.xml"); 

     // Act 
     xmlHandler.Creator(); 

     // Assert 
     FileAssert.Exists(firstStudentId, "Az első azonosító nem jött létre!"); 
     FileAssert.Exists(lastStudentId, "Az utolsó azonosító nem jött létre!"); 
    } 
} 

回答

0

創建一個列表用作retured值,並在模擬設置返回時調用。

var fakeData = new List<string>() { 
    "path_1", 
    "path_2", 
    "path_3", 
    "path_4", 
    //...other string paths 
}; 

var handlerMock = new Mock<IHandler>(); 
handlerMock 
    .Setup(x => x.ReadBooklets()) 
    .Returns(fakeData); //setup to return data here 

//...other code removed for brevity 
相關問題