2017-05-08 5 views
1

私は2つのクラスと1つのインターフェイスを持っています。私は自分のテストでモックを使いたい。私は自分のReadBooklets()メソッドを設定したいです。しかし、どうすればいいのか分かりません。リスト<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 
関連する問題