如何在 C# 中模拟 out 变量?
How can I mock an out variable in c#?
我正在使用 Moq 框架。我正在尝试从函数调用中模拟数据,但问题是,函数 RETURNS 是一个布尔值,响应数据来自 BsonArray 形式的 OUT 变量。我如何模拟这个 out 变量?
database.runQuery(query, out BsonArray result, out err, out errorMessage);
我们如何设置此函数以供模拟使用?
例如mock.Setup(x => x.runQuery(It.IsAnyblahblah)
我以前尝试过但失败了。帮帮我
设置具有适当签名的代理人:
public delegate void OutAction<T1, T2, T3, T4>(T1 arg1, out T2 arg2, out T3 arg3, out T4 arg4);
声明变量以接受您的 out 值(其中 P1、P3 和 P4 是这些变量的类型):
var test_result = new BsonArray(); // I'm not familiar with this class, so this is just a guess
var test_err = new P3();
var test_errorMessage = new P4();
然后创建你的模拟
mock
.Setup(x => x.runQuery(It.IsAny<P1>(), out It.IsAny<BsonArray>(), out It.IsAny<P3>(), out It.IsAny<P4>()))
.Callback(new OutAction<P1,BsonArray,P3,P4>((P1 var1, out BsonArray var2, out P3 var3, out P4 var4) => { _code_to_set_the_values_of_var2_var3_and_var4; }))
.Returns _desired_return_value_for_runQuery;
你可以了解更多here or here
这是我最小化参数的方式:
delegate void SubmitTest(out string mystring );
string sentSql = string.Empty;
string functionResult = string.Empty;;
Mock.setup(x=>x.runQuery(out It.ref<string>().IsAny))
.Callback( new SubmitTest( (out string mystring) =>
{
sentSql = mystring; // see what was sent
functionresult = somefunctionCall(mySql) ; if i was calling function
}
.Returns(
// can use "select * From customer";
// or sentSql
);
我找到答案的方式比 callbacks/delegates 好得多。
bsonArray result = {..Whatever data you have};
State err = default;
string errorMessage = default;
mock.Setup(x => x.runQuery(It.IsAny<string>(), out result, out err, out errorMessage);
我正在使用 Moq 框架。我正在尝试从函数调用中模拟数据,但问题是,函数 RETURNS 是一个布尔值,响应数据来自 BsonArray 形式的 OUT 变量。我如何模拟这个 out 变量?
database.runQuery(query, out BsonArray result, out err, out errorMessage);
我们如何设置此函数以供模拟使用?
例如mock.Setup(x => x.runQuery(It.IsAnyblahblah)
我以前尝试过但失败了。帮帮我
设置具有适当签名的代理人:
public delegate void OutAction<T1, T2, T3, T4>(T1 arg1, out T2 arg2, out T3 arg3, out T4 arg4);
声明变量以接受您的 out 值(其中 P1、P3 和 P4 是这些变量的类型):
var test_result = new BsonArray(); // I'm not familiar with this class, so this is just a guess
var test_err = new P3();
var test_errorMessage = new P4();
然后创建你的模拟
mock
.Setup(x => x.runQuery(It.IsAny<P1>(), out It.IsAny<BsonArray>(), out It.IsAny<P3>(), out It.IsAny<P4>()))
.Callback(new OutAction<P1,BsonArray,P3,P4>((P1 var1, out BsonArray var2, out P3 var3, out P4 var4) => { _code_to_set_the_values_of_var2_var3_and_var4; }))
.Returns _desired_return_value_for_runQuery;
你可以了解更多here or here
这是我最小化参数的方式:
delegate void SubmitTest(out string mystring );
string sentSql = string.Empty;
string functionResult = string.Empty;;
Mock.setup(x=>x.runQuery(out It.ref<string>().IsAny))
.Callback( new SubmitTest( (out string mystring) =>
{
sentSql = mystring; // see what was sent
functionresult = somefunctionCall(mySql) ; if i was calling function
}
.Returns(
// can use "select * From customer";
// or sentSql
);
我找到答案的方式比 callbacks/delegates 好得多。
bsonArray result = {..Whatever data you have};
State err = default;
string errorMessage = default;
mock.Setup(x => x.runQuery(It.IsAny<string>(), out result, out err, out errorMessage);