C# 如何模拟txt输出?

C# 如何模拟txt输出?,c#,moq,C#,Moq,我有一个txt,逻辑可以通过存储库访问它。我想确定当我从逻辑调用Write方法时,repository的Write方法只被调用一次。我的代码: [Test] public void TestThatWriteWasCalledOnce() { Mock<IRepository> mockinstance = new Mock<IRepository>(); LogicSaveGame logic = new Logi

我有一个txt,逻辑可以通过存储库访问它。我想确定当我从逻辑调用Write方法时,repository的Write方法只被调用一次。我的代码:

    [Test]
    public void TestThatWriteWasCalledOnce()
    {
        Mock<IRepository> mockinstance = new Mock<IRepository>();
        LogicSaveGame logic = new LogicSaveGame(mockinstance.Object);
        //mockinstance.Setup(x => x.Write(It.IsAny<string>(), It.IsAny<string>())).  //???
        logic.Write(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>());
        mockinstance.Verify(x => x.Write(It.IsAny<string>(), It.IsAny<string>()), Times.Once());
    }
我真的很感谢任何帮助,在谷歌上找不到任何东西

编辑,逻辑保存游戏:

    private readonly IRepository saveGameRepo;

    public LogicSaveGame(IRepository repo)
    {
        this.saveGameRepo = repo;
    }

    public void Write(string name, string a, string b, string filename)
    {
        int ids = this.saveGameRepo.GetIds(filename);
        var xd = new XElement(
            "game",
            new XAttribute("id", ids + 1),
            new XAttribute("name", name),
            new XAttribute("hour", DateTime.Now.Hour),
            new XAttribute("minute", DateTime.Now.Minute),
            new XElement(
            "player1",
            new XElement("name", a.Name),
            new XElement(
            "player2",
            new XElement("name", b.Name),
            ));
        this.saveGameRepo.Write(filename, xd.ToString());
    }
编辑2:我得到同样的错误
mockinstance.Setup(x=>x.Write(It.IsAny(),It.IsAny()).Verifiable()

我闻到您在调用
LogicSaveGame
(显然是保存到XML文件)之前忘记正确设置模拟。你可以参考这个。

TL;DR

要解决问题,请转到方法调用
逻辑。编写具体的
字符串
值,例如:

logic.Write("name", "a", "b", "filename");

解释

问题不在于模仿
i假设
。问题是如何调用方法
logic.Write
。您可以使用
it.IsAny()
将参数传递给它。方法
It.IsAny()
返回
null
值,因此在执行过程中,将使用下一个值调用方法
logic.Write

logic.Write(null, null, null, null);

在方法
逻辑内部。编写您创建的
。文档说明此构造函数要求其两个参数都不为null。在测试中,使用
name
变量的
null
值调用它,因此抛出一个异常
System.ArgumentNullException:value不能为null
,该异常指向构造函数
XAttribute.ctor(XName,Object value)
。因此,为了解决这个问题,有必要传递给方法
logic.Write
非空字符串值。

我认为我们缺少一些信息。你能展示一下logicsavegame类吗?我有很多类似问题的通用解决方案,甚至不考虑细节:我使用诊断流。它截取任何输出,然后我可以使用例如我的测试环境来分析内部流。诊断流是一个
实现,它构建在代码给出的任何其他流之上。拦截I/O后,您可以执行任何操作,包括查看每个字节的读取或写入。这正是问题所在,我的写入方法无效,无法在设置中返回任何内容。非常感谢,它可以完美地处理大量字符串。Empty。
logic.Write(null, null, null, null);