如何使用 mock 设置 List<string> ReadBooklets 方法?

How can I setup List<string> ReadBooklets method with mock?

我有两个 class 和一个接口。我想在我的测试中使用模拟。我想设置我的 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!");
    }
}

创建一个列表以用作返回值,并将模拟设置为 return 调用时的值。

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