问题描述
我正在编写一个应用程序来检查数据库中的一些数据(数据库不断更新)。 为了从数据库中获取数据,我使用了另一个团队编写的 assembley(.dll 文件)(我无法获取/更改 .dll 文件的代码)。
我想用我自己的数据(极端数据)“压力测试”我的算法/porgram,我无法更改数据库。 一个简化的代码示例:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//timer1.Interval = 10000
private void timer1_Tick(object sender,EventArgs e)
{
DataTable values = someLib.GetData(DateTime.Now.AddDays(-1),DateTime.Now);
CheckData(values); //checking the data form the DB,I want to "stress test" this function/logic.
}
}
我想要 someLib.GetData 函数返回一个特定的数据(检查我的程序)。 我可以编写一个新函数,它返回与 someLib.GetData 相同的 DataTable(相同的列等),但使用我自己的数据,问题是该解决方案需要手动检查 GetData 的所有出现(以及从DB)并手动更改它们。 我正在寻找一些系统的方法来解决这个问题。 我想到的另一种方法是删除引用并“修复”所有错误,问题是我在上述库中使用了很多我仍然需要的函数。
我的问题是,有没有办法从我没有代码的程序集中覆盖/禁用一个函数(甚至整个类)?
谢谢。
编辑:方法不是虚拟的。
解决方法
这个解决方案怎么样(如果我理解正确的话):
;* AR0 assigned to _x
;* AR1 assigned to _r
;* T0 assigned to _nx
PSH T3
|| BSET FRCT ;fractional mode
SUB #1,T0 ;nx-1
MOV T0,BRC0 ;repeat nx times
MOV #2596 << #16,AC3 ; AC3.Hi = C5
MOV #-9464 << #16,AC1 ; AC1.Hi = C3
MOV #32617 << #16,AC2 ; AC2.Hi = C1
*
* Note: loading T3 on the instruction before a multiply that uses it will
* cause a 1-cycle delay.
*
MPYMR T3=*AR0+,AC3,AC0 ; (Prime the Pump)
|| RPTBLOCAL loop1-1
MACR AC0,T3,AC1,AC0
MPYR T3,AC0
||MOV *AR0+,T1 ; (for next iteration)
MACR AC0,AC2,AC0
||MOV T1,T3
MOV HI(AC0),*AR1+ ;save result
||MPYR T1,AC0 ; (for next iteration)
loop1:
POP T3
|| BCLR FRCT ;return to standard C
MOV #0,T0 ;return OK value (no possible error)
|| RET
您需要的只是将 SomeLib 实例的声明更改为 MyLib 实例,即代替
public class MyLib {
public SomeLib someLib { get; set; }
public MyLib (SomeLib someLib) {
this.someLib = someLib;
}
public void methodFromSomeLibWhichIsRequired(...) {
return someLib.methodFromSomeLibWhichIsRequired(...);
}
// ... so on for any used methods of SomeLib
public DataTable getData() {
// my own implementation of method of SomeLib
}
}
使用这个
SomeLib someLib = new SomeLib();
因此您无需在任何地方更改 MyLib someLib = new MyLib(new SomeLib());
的名称,只需在 someLib
中实现您需要的 MyLib
方法。