如何使用 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
我有两个 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