MOQ支持设置输出参数,没有问题。我希望能够根据调用传递的内容通过Returns()或Callback()来设置参数。我的使用场景涉及模拟一个具有输出参数的方法。
这是我目前用来实验的代码,但每次都得到负面结果:
public interface ITestClass
{
string method(string inString, out string outString);
}
public class TestClass : ITestClass
{
public string method(string inString, out string outString)
{
outString = inString + " was passed in";
return (inString + " was returned");
}
}
[TestFixture]
public class OutTest
{
[Test]
public void Test()
{
//Arrange
Mock<ITestClass> mock = new Mock<ITestClass>(MockBehavior.Strict);
string stringParm = "value that will be assigned to out parameter";
mock.Setup(t => t.method(It.IsAny<string>(), out stringParm))
.Returns((string i, string o) =>
{
return i + " was returned"; // o = stringParm already
})
.Callback((string s, string oo) =>
{
stringParm = s + " was passed in"; // oo = stringParm already
});
TestClass real = new TestClass();
string testString = DateTime.Now.ToLongTimeString();
//Act
string realOut;
string mockOut;
string realResult = real.method(testString, out realOut);
string mockResult = mock.Object.method(testString, out mockOut);
//Assert
realResult.Should().Be(mockResult); // passes
realOut.Should().Be(mockOut); // fails - mockout = original stringParm
}
}