【发布时间】:2012-04-25 18:32:53
【问题描述】:
我试图在一个非常庞大且臃肿的系统上实现一个使用单元测试的框架,主要问题是 70% 的系统是用静态方法实现的。这就是我达到 Moles 的方式,而且我非常有信心达到我的目标(我已经很接近了)。
我现在遇到的问题是我正在尝试使用通用参数来破坏静态方法:
public static T ExecScalar<T>(IDbConnection cx, string commandText, IDbTransaction tx, IEnumerable<IDbDataParameter> parameters)
在网上搜索我发现了这条论坛消息:
http://social.msdn.microsoft.com/Forums/uk/pex/thread/3faadca2-a26f-449c-942e-d800a6079e02
这正是我的问题,建议阅读第 10 页的手册。
我已经阅读了第 10 页的手册,但它是在谈论存根而不是磨合。我已经尝试应用所描述的解决方案,但如果我提出:
Ktcar.Cs.Dal.DB.Moles.MDALDB.ExecScalarIDbConnectionStringIDbTransactionIEnumerableOfIDbDataParameter<int> = delegate(IDbConnection conn, String command, IDbTransaction trx, IEnumerable<IDbDataParameter> parameters)
我明白了:
“只有赋值、调用、递增、递减和新建对象表达式可以用作语句”
我也试过了:
Ktcar.Cs.Dal.DB.Moles.MDALDB.ExecScalarIDbConnectionStringIDbTransactionIEnumerableOfIDbDataParameter<T> = delegate(IDbConnection conn, String command, IDbTransaction trx, IEnumerable<IDbDataParameter> parameters)
我得到同样的错误
或者:
Ktcar.Cs.Dal.DB.Moles.MDALDB.ExecScalarIDbConnectionStringIDbTransactionIEnumerableOfIDbDataParameter = null;
然后我得到:
“不能分配给‘ExecScalarIDbConnectionStringIDbTransactionIEnumerableOfIDbDataParameter’,因为它是‘方法组’”
请问,任何人都可以帮助我了解如何使用通用类型输出模拟静态方法吗?
【问题讨论】:
-
你的样本似乎有点缺乏......你不应该有类似的东西:Ktcar.Cs.Dal.DB.Moles.MDALDB.ExecScalarIDbConnectionStringIDbTransactionIEnumerableOfIDbDataParameter
= (IDbConnection conn, String command, IDbTransaction trx, IEnumerable parameters) => { int x = 0;/* 给 x 赋值 */ return x; }; -
我已将委托分配更改为 null 以简化,如果我写你的句子,我会得到同样的错误。编译器不喜欢 Molling 方法名称后面的
。