我有一个txt,逻辑可以通过存储库进行访问。我想确定,当我从逻辑调用Write方法时,存储库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());
}
当我运行上面的测试时,出现错误:
Message:
System.ArgumentNullException : Value cannot be null.
Parameter name: value
Stack Trace:
XAttribute.ctor(XName name, Object value)
我真的很感谢您的帮助,无法在Google上找到任何东西。
编辑,逻辑保存游戏:
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:我得到与嘲笑相同的错误.Setup(x => x.Write(It.IsAny(),It.IsAny()))。Verifiable();
TL; DR
要解决您的问题,请传递给方法调用logic.Write
具体string
值,例如:
logic.Write("name", "a", "b", "filename");
说明
问题不在于嘲弄IRepository
。问题是您如何调用method logic.Write
。您可以使用将参数传递给它It.IsAny<string>()
。方法It.IsAny<string>()
返回null
值,因此在执行过程logic.Write
中,将使用以下值调用您的方法:
logic.Write(null, null, null, null);
logic.Write
您创建的内部方法XAttribute("name", name)
。文档说此构造函数要求其两个参数都不为null。在测试中,它使用变量的null
值来调用,name
因此System.ArgumentNullException : Value cannot be null
引发了指向构造函数的异常XAttribute.ctor(XName name, Object value)
。因此,要解决该问题,有必要将方法的logic.Write
非空字符串值传递给它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句